你好,我在function.php中有这个代码片段,实际上我使用了一个learnpress插件钩子:learn-press/course-item-content,我也尝试了这个:learn-press/lesson-start,目标是为来宾和未登录的用户提供每个课程的学习新闻课程视图数量。我已经用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,但在刷新页面后,我知道视图的最后一个值不是2,而是views=3!现在它将更改为views=4。我检查了如果我将递增的值更改为3,行中是否发生了$tempval = intval(get_post_field('views',$item->get_id()))+1;,结果是,如果views等于1,我转到页面,查看更新为4,但之后我再次转到页面,开始时值为7,它将更改为10,依此类推。我不明白为什么这种情况会发生两次,而我看不到任何证据表明这种代码会发生两次。因为我放入检查的脚本代码只发生一次,而check in update钩子证明了这一点。
发布于 2021-03-16 20:23:36
我没有找到这种情况发生两次的原因,但我可以用一种巧妙的方式编写一段代码,使一节课的页面浏览量达到课程的页面浏览量,并在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));
}
}如果你试图在elementor插件中查看viewsv2作为自定义字段,它会显示具有subscriber角色的用户的确切页面浏览量,这些用户是学生,而不是登录的用户,这些用户是访客。
https://stackoverflow.com/questions/66647316
复制相似问题