php - 显示 learnpress 插件的课程视图数量
问题描述
你好,我在function.php中有这个代码片段,实际上我使用了一个learnpress插件钩子:
learn-press/course-item-content
我也试过这个:
learn-press/lesson-start
目标是为客人提供每节课的learnpress课程视图数量,而不是登录用户。我已经使用 Pods 插件为 lp_lesson 类型创建了自定义字段视图。
<?PHP
// I inserted this code to show the number of views for each lesson
//*************************************************************
add_action('learn-press/course-item-content', 'lesson_views');
function lesson_views(){
$item = LP_Global::course_item();
if(is_user_logged_in()){
$user = wp_get_current_user();
if ( !in_array( 'subscriber', (array) $user->roles ) ) {
return;
}
}
echo "<script>console.log('get_post_field".get_post_field('views',$item->get_id())."');
</script>";
$tempval = 0;
if(get_post_field('views',$item->get_id())==''||get_post_field('views',$item->get_id())==null)
{
$tempval = 1;
echo "<script>console.log('tempval = 1');</script>";
}
else
{
$tempval = intval(get_post_field('views',$item->get_id()))+1;
echo "<script>console.log('tempval = ".$tempval."');</script>";
}
update_post_meta($item->get_id(),'views',$tempval,get_post_field('views',$item->get_id()));
echo "<script>console.log('get_post_field".get_post_field('views',$item->get_id())."');
</script>";
//End Of the code to show the number of views for each lesson
//*************************************************************
}
add_action( 'updated_post_meta', 'my_update_post_meta', 10, 4 );
function my_update_post_meta($meta_id, $post_id, $meta_key, $_meta_value)
{
echo "<script>console.log('sth updated".$_meta_value."');</script>";
if($meta_key =="views"){
echo "<script>console.log('views updated".$_meta_value."');</script>";
}
}
我注意到字段视图的更新发生了一次,但是当我刷新页面时,它实际上发生了两次。例如,如果现在views=1,我去页面,它会views=2,但是刷新页面后,我知道views的最后一个值不是2,而是views=3!现在它将更改为views = 4。我检查了$tempval = intval(get_post_field('views',$item->get_id()))+1;
如果我将增加的值更改为 3 时发生的行中,这将导致如果视图等于 1,我转到页面并将视图更新为 4,但之后我再次转到页面,开始时值为 7,然后会变为 10,依此类推。我不明白为什么这会发生两次,而我看不到任何证据表明此代码发生了两次。因为我检查的脚本代码发生了一次,并且检查更新钩子证明了这一点。
解决方案
我没有找到两次发生这种情况的原因,但是以一种棘手的方式,我可以编写一个代码来获取课程的页面浏览量并在 elementor 插件中使用。这是代码:
add_action('learn-press/lesson-start', 'lesson_views');
function lesson_views($item){
//$itemc = LP_Global::course_item();
echo "<script>console.log('get_post_field".get_post_field('views',$item-
>get_id())."');</script>";
$tempdata = get_post_field('views',$item->get_id());
$postview = intval($tempdata);
$postviewf = floatval($tempdata);
$newvalue = floatval(0);
if($postviewf > 0){
if($postviewf - $postview == 0.5){
$newvalue = round($postviewf);
}else{
$newvalue = $postview+0.5;
}
echo "<script>console.log('newvalue".$newvalue."');</script>";
}else{
$newvalue = 0.5;
}
$postID = $item->get_id();
update_post_meta($postID,'views',$newvalue,$tempdata);
echo "<script>console.log('get_post_field".get_post_field('views',$item-
>get_id())."');</script>";
//End Of the code to show the number of views for each lesson
*************************************************************
}
add_action( 'updated_post_meta', 'my_update_post_meta', 10, 4 );
function my_update_post_meta($meta_id, $post_id, $meta_key, $_meta_value)
{
echo "<script>console.log('sth updated".$_meta_value."');</script>";
if(get_post_type( $post_id )=='lp_lesson' && $meta_key =="views"){
echo "<script>console.log('views updated".$_meta_value."');</script>";
update_post_meta($post_id,'viewsv2',round($_meta_value));
}
}
如果您尝试viewsv2
在 elementor 插件中查看自定义字段,它会显示具有角色订阅者的用户的页面浏览量的确切数量,这些用户是学生,而未登录的用户是访客。
推荐阅读
- java - 将 Java 地图转换为 SearchSourceBuilder Elasticsearch 7.2 Java 高级 API
- flowtype - 使用可选 id 操作 Flow 泛型类型列表
- c# - 修改 SelectList 中项目中的文本
- java - 如何逆时针旋转一圈画布android
- javascript - 如何将猫鼬承诺循环限制为几次?
- javascript - 如何解决错误“THREE.GLTFLoader:加载缓冲区“scene.bin”失败。”?
- java - JavaFX 应用程序线程 - 使用 Gluon Ignite 依赖注入时
- node.js - 无法使用 Sequelize 从 PG DB(在 Azure 中)检索数据
- java - 键盘输入的最高性能
- c - 如何正确返回结构数组(在此代码战示例中)?