我在Wordpress中使用文本文件编写了一个简单的计数器短代码,我发现它以某种方式触发了多次文件写入过程。
function sc_page_counter() {
$fname = get_stylesheet_directory() . "/counter.txt";
if (!file_exists($fname)) {
file_put_contents($fname, "0");
}
$ct = file_get_contents($fname);
file_put_contents($fname, ++$ct);
return $ct;
}
add_shortcode('page_counter', 'sc_page_counter');
我已将短代码调用放入footer.php
This site has been visited <?php echo do_shortcode('[page_counter]') ?> times.
假设counter.txt的当前内容为20.短代码将在检查counter.txt文件时正确输出“21”。现在是“25”。无论我是在本地运行还是在生产服务器中运行,结果都会有所不同。
我尝试通过添加一个字符而不是编写新值来进一步测试它,并将其附加大约32次。我目前难以理解为什么会这样。
答案 0 :(得分:0)
首先,不要使用短代码。第二,写入数据库。
网站浏览量:
functions.php
你的主题:
function header_stuff()
{
$site_views = get_option('site_views');
update_option('site_views', (((preg_match('#^\d+$#', $site_views)) ? $site_views : 0) + 1));
}
add_action('wp_head', 'header_stuff');
footer.php
This site has been visited <?php echo get_option('site_views') ?> times.
或者,如果您想查看单个帖子/页面页面的视图,可以使用以下内容:
functions.php
你的主题:
function header_stuff()
{
global $post;
if (is_object($post) && is_singular())
{
$post_views = get_post_meta($post->ID, '_views', true);
update_post_meta($post->ID, '_views', (((preg_match('#^\d+$#', $post_views)) ? $post_views : 0) + 1));
}
}
add_action('wp_head', 'header_stuff');
输出您需要的地方:
if (is_object($post) && is_singular())
{
echo 'Views: ' . get_post_meta($post->ID, '_views', true);
}
或者,如果您需要,可以将它们都计算在内:
function header_stuff()
{
//Site view
$site_views = get_option('site_views');
update_option('site_views', (((preg_match('#^\d+$#', $site_views)) ? $site_views : 0) + 1));
//Post view
global $post;
if (is_object($post) && is_singular())
{
$post_views = get_post_meta($post->ID, '_views', true);
update_post_meta($post->ID, '_views', (((preg_match('#^\d+$#', $post_views)) ? $post_views : 0) + 1));
}
}
add_action('wp_head', 'header_stuff');