首页 > 解决方案 > Wordpress 插件在首页触发两次,但在管理员触发一次

问题描述

我正在开发一个插件来计算用户访问并保存 IP、日期和访问次数。在 DB 中有 id(big int)、IP(str)、visits(int) 和 date(DATE)。我在插件主文件中的代码是这样的:

if (is_admin()){
    include WPS_INC . 'back-end.php';
}else{
    include WPS_INC . 'front-end.php';
    do_action('wps_update_db');
}

front-end.php 中的代码

function wps_user_visits_count(){
    global $wpdb;
    $tp = $wpdb->prefix;
    $today = date('Y-m-d');
    $ip = intval($_SERVER['SERVER_ADDR']);
    $is_user_visited_site_today = $wpdb->get_var("SELECT `id`
                                                        FROM `{$tp}wps_user_visits` 
                                                        WHERE `date` = '{$today}' AND `ip` = {$ip}");
    if (empty($is_user_visited_site_today)){
        $wpdb->insert($tp . 'wps_user_visits',
        array(
            'ip' => $ip,
            'date' => $today
        ),
        array(
            '%d','%s'
        ));
    }else{
        $wpdb->query("UPDATE `{$tp}wps_user_visits`
                      SET `visits` = `visits` + 1
                      WHERE `id` = {$is_user_visited_site_today}");
    }
}

add_action('wps_update_db','wps_user_visits_count');

它将在 DB 中添加 2 次访问而不是 1 次。例如,在这一行SET `visits` = `visits` + 1中,如果我将 1 更改为 3,它将添加 6 次访问而不是 3。

我怎么解决这个问题?

我也用$wpdb->update. 不用找了。

标签: mysql

解决方案


问题在于代码。

问题出在Wampserver 上

因此,如果您使用 wampserver,请备份您的数据库和 www 文件夹,然后使用 REVO UNINSTALLER 删除 wampserver。使用此程序进行卸载非常重要。

第一步卸载后,您应该使用 Revo 卸载程序删除所有剩余文件。

之后,您可以轻松安装 wampserver,一切顺利。

我应该说我也在使用虚拟主机。因此,如果您使用它,我的回答可能会对您有所帮助。

如果您正在使用其他本地主机程序,例如 XAMP 和 Laragon,请尝试此解决方案。


推荐阅读