使用WP超级缓存时,插件会为模板生成静态HTML文件,这意味着您正在运行的任何PHP代码只有在生成或重新生成缓存页面时才会运行。
因此,如果需要在缓存后面的每个页面加载上触发PHP代码,则需要使用AJAX.
因此,对于您的用例,您需要在函数文件中添加两个函数。首先,您需要将发出AJAX请求的Javascript添加到所有帖子的页脚。这将做到:
function my_count_views_script() {
if ( is_single() ) :
?>
<script>
jQuery.post({
url: \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\',
action: \'my_count_views\',
post_id: <?php the_ID(); ?>
});
</script>
<?php
endif;
}
add_action( \'wp_footer\', \'my_count_views_script\' );
这会向管理员ajax发送一个请求。php文件,其中包含正在查看的帖子的post\\u id以及我们要使用它执行的操作。
要计算此视图的数量,您需要告诉admin ajax。php在收到请求时运行的代码my_count_views
行动你可以通过勾住wp_ajax_my_count_views
(为登录用户处理)和wp_ajax_nopriv_my_count_views
对于已注销的用户:
function my_count_views() {
if ( isset( $_POST[\'post_id\'] ) && $_POST[\'post_id\'] ) {
$post_id = intval( $_POST[\'post_id\'] );
$views = intval( get_post_meta( $post_id, \'postsViews\', true ) ) ?: 0;
$views += 1;
update_post_meta( $post_id, \'postsViews\', $views );
}
wp_die();
}
add_action( \'wp_ajax_my_count_views\', \'my_count_views\' );
add_action( \'wp_ajax_nopriv_my_count_views\', \'my_count_views\' );