由于插件作者没有为我们提供任何操作或过滤器,因此我们只能满足于“倾听”对views
改为元字段。
function wpse_104324_prevent_multiple_views( $meta_id, $object_id, $meta_key, $meta_value ) {
if ( $meta_key === \'views\' ) {
if ( ! empty( $_COOKIE[ USER_COOKIE . \'_views\' ] ) )
$viewed = array_map( \'intval\', explode( \',\', $_COOKIE[ USER_COOKIE . \'_views\' ] ) );
else
$viewed = array();
$viewed[] = $object_id;
setcookie(
USER_COOKIE . \'_views\',
implode(
\',\', $viewed
),
time() + 31536000,
COOKIEPATH,
COOKIE_DOMAIN,
false,
true
);
}
}
add_action( \'updated_post_meta\', \'wpse_104324_prevent_multiple_views\', 10, 4 );
add_action( \'added_post_meta\', \'wpse_104324_prevent_multiple_views\', 10, 4 );
现在发生的是
views
修改后,我们将当前帖子ID添加到当前用户的“视图堆栈”,然后将其另存为cookie。
有了这个功能,我们现在可以检查用户是否已经查看了帖子,如果已经查看了,请防止再次保存他们的查看次数。
if ( ! empty( $_COOKIE[ USER_COOKIE . \'_views\' ] ) ) {
$viewed = array_map( \'intval\', explode( \',\', $_COOKIE[ USER_COOKIE . \'_views\' ] ) );
if ( in_array( $post->ID, $viewed ) )
remove_action( \'wp_head\', \'process_postviews\' );
}
将最后一段代码放在
remove_view_counter_wpse_102637
作用