我正在学习插件。我只想在打开帖子后增加观点。如果我对这些行进行了评论:
// if(is_single()){
// $views++;
// }
我没有看到任何增加。当他们没有被评论时,打开帖子后我立即看到增加。
add_filter('the_content', 'get_views_count');
function get_views_count($content){
if(is_page()){
return $content;
}
global $post;
$views = $post->my_count;
// if(is_single()){
// $views++;
// }
return $content . '<p>Views: ' . $views . '</p>';
}
add_action('wp_head', 'increase_counts');
function increase_counts(){
if(!is_single()){
return;
}
global $wpdb, $post;
$views = $post->my_count + 1;
$query = "UPDATE $wpdb->posts SET my_count=$views WHERE ID=$post->ID";
$wpdb->query($query);
}
我认为wp_head钩子应该先于the_content。对我来说逻辑更容易:wp_head从db获取计数,增加它并将其写入db。然后the_content只输出结果。如何知道哪个钩子先行?我怎样才能在这个例子中改变他们的优先级?
答案 0 :(得分:0)
Rachel Vasquez拥有WordPress上最全面的文章之一。你可以在周围找到射击顺序排序的钩子,所以每当你需要知道哪个钩子首先发射时你应该完全检查它:The WordPress Hooks Firing Sequence!
现在,为了回答你的问题,wp_head
首先开火。您的代码存在问题:
global $wpdb, $post;
$views = $post->my_count + 1; // HERE!
您正在为$views
分配$post->my_count
+ 1的当前值(例如5 + 1 = 6),但$post->my_count
仍然保留其旧值(例如5) )。
如果要显示更新的视图计数,则需要先增加$post->my_count
:
global $wpdb, $post;
$post->my_count = $post->my_count + 1; // Increment the views count in the $post object first
$views = $post->my_count; // Assign the newly updated views count to the $views variable
这样,当你的get_views_count()
函数被调用时,$post
对象已经更新,并且已经有正确的视图计数。
<强>除了:强>
您似乎已更改wp_posts
表格以包含my_count
列。请不要这样做。
尽可能避免更改核心内容(数据库表和/或WordPress核心文件和文件夹),以确保您使用未来的WordPress版本开发的任何插件或主题的最大兼容性。您希望通过update_post_meta()函数将您的观看数据存储在wp_postmeta
表格中。