每次页面重新加载时只运行一次插件

时间:2011-11-14 作者:21zna9

我正在制作一个插件,计算访问者访问我的网站的次数。我想在每个页面加载时运行插件中的代码一次。我能用什么好的动作钩?

3 个回复
最合适的回答,由SO网友:Ashfame 整理而成

基本思想是使用javascript对站点进行AJAX回调,从而保存命中率,因为如果单独使用PHP,则不会计算缓存页面的命中率,因为当时没有处理PHP。

研究WP Postviews插件的代码http://lesterchan.net/portfolio/programming/php/#wp-postviews

Edit:

在Firefox中可能会触发两次钩子,因为它会将HTML源中指定的URL预取为

<link rel=\'next\' href=\'http://www.domain.com/adjacent-post/\' />

使用此选项从源中删除该行

remove_action(\'wp_head\', \'adjacent_posts_rel_link_wp_head\');

SO网友:kaiser

@阿什法梅写得对。关于你的钩子(我们不知道你用的是哪一个-发射两次听起来很奇怪):shutdown 是执行的最后一个挂钩。

SO网友:Dwayne Charrington

我要做的是根本不使用任何挂钩。仅仅因为Wordpress提供了操作和过滤器挂钩,并不意味着您必须使用它们。在页脚中。php文件中,在标记之前添加以下内容。

<?php if ( is_single() )  registerHit(get_the_ID()); ?>
然后在你的函数中。php添加此函数:

function registerHit($post_ID)
{
    $meta_key = \'post_views_count\';
    $count = get_post_meta($post_ID, $meta_key, true);
    if( $count == \'\')
    {
        $count = 0;
        delete_post_meta($post_ID, $meta_key);
        add_post_meta($post_ID, $meta_key, \'0\');
    }
    else
    {
        $count++;
        update_post_meta($post_ID, $meta_key, $count);
    }
}
有些人会说,这对Wordpress来说太过手动,但我已经使用Wordpress多年了,我基本上在每个项目上都使用它,有时使用直接向上的函数比使用动作或过滤器更容易。

结束

相关推荐

将目录路径传递给plugins_url()安全吗?

plugins_url() 函数接受插件slug或文件路径来构建URL。我有以下目录结构:/wp-content/mu-plugins/someplugin/css/file.css /wp-content/mu-plugins/someplugin/includes/file.php 我需要建立URL到file.css 在里面file.php. 我不能通过__FILE__ 因为这将是一个层次太深。plugins_url(\'css/file.css\', __FILE__ )