Wordpress 插入查询运行 3 次

Cit*_* SP 0 php mysql wordpress

我做了以下功能来跟踪 Wordpress 帖子或页面的视图。奇怪的是插入查询运行了 3 次而不是一次。

我尝试使用以下操作挂钩解决此问题,但到目前为止没有结果。

 remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
Run Code Online (Sandbox Code Playgroud)

我的代码:

add_action('wp_footer',function(){
    global $wpdb;
    global $wp_query;

    $post_id  = $wp_query->post->ID; 
    $count    ='1';
    $datetime = date("Y-m-d H:i:s");   

    $sql = $wpdb->prepare("INSERT IGNORE INTO track_views (datetime, count, post_id) 
                     VALUES (%s, %d, %d) 
                     ON DUPLICATE KEY UPDATE count = count +1", 
                    $datetime, $count, $post_id);
        $wpdb->query($sql);

});
Run Code Online (Sandbox Code Playgroud)

更新: 如果我从第 X 页转到第 Y 页,它似乎计算两个页面,而不是仅计算当前页面。如何只计算当前页面?

小智 5

我遇到了完全相同的问题...这是 Yoast SEO 插件。

我禁用了所有插件(除了 Exec-PHP,v4.9)并且代码运行良好。在 WP 的全新安装上分别测试了所有 11 个其他插件后 - 只是 Yoast SEO 插件 + Exec-PHP 插件启用导致 3 记录现象。

数据库表结构:

CREATE TABLE `dk_test_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `value1` int(11) NOT NULL,
  `value2` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)

WP PAGE CODE(将单条记录写入自定义表):

<?php
global $wpdb;
$wpdb->insert( dk_test_table, array( 'value1' => "1", 'value2' => "2"));
?>
Run Code Online (Sandbox Code Playgroud)

禁用 Yoast SEO 插件,查看页面,插入 1 条记录。
启用 Yoast SEO 插件,查看页面,插入 3 个相同的记录。

WP 版本:4.7.3
Yoast SEO 版本:4.4

我希望这可以帮助那里的人!