0

你好,我在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,依此类推。我不明白为什么这会发生两次,而我看不到任何证据表明此代码发生了两次。因为我检查的脚本代码发生了一次,并且检查更新钩子证明了这一点。

4

1 回答 1

0

我没有找到两次发生这种情况的原因,但是以一种棘手的方式,我可以编写一个代码来获取课程的页面浏览量并在 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 插件中查看自定义字段,它会显示具有角色订阅者的用户的页面浏览量的确切数量,这些用户是学生,而未登录的用户是访客。

于 2021-03-16T12:23:35.970 回答