将行添加到自定义数据库表并删除超过1天的所有行

时间:2014-01-28 作者:Swen

我正在编辑一个查看计数器插件,以便它记录每个查看帖子的用户的IP。这是为了防止他们刷新页面,从而创建人工视图。

我遇到的问题是在数据库表中添加行,然后删除任何超过一个小时的行。我肯定我做错了什么,但我不知道是什么。Wordpress的文档让我很困惑。

This is my database creation function

### Create Database for IP Logging
function postviews_create_table () {
    global $wpdb;

    $table_name = $wpdb->prefix . "postviews_ips";

$sql = "CREATE TABLE $table_name (
    postid MEDIUMINT NOT NULL,
    ip VARCHAR(15) NOT NULL,
    time DATETIME DEFAULT \'0000-00-00 00:00:00\' NOT NULL
);";

require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
dbDelta( $sql );
}

And this is the function that\'s supposed to add new rows and delete old ones.

### Add user IP to Database & Delete Entries Older Than 1 Day
function postviews_add_ip () {
    global $post;
        $id = $post->ID;
        $ip = $_SERVER[\'REMOTE_ADDR\'];
        $time = date("Y-m-d H:i:s");

    $wpdb->insert( 
        \'wp_postviews_ips\', 
        array( 
            \'postid\' => $id,
            \'ip\' => $ip,
            \'time\' => $time
        )
        array(
            \'%d\',
            \'%s\', 
            \'%d\'
        ) 
    );

    $sql = "DELETE FROM wp_postviews_ips WHERE time_created < (NOW() - INTERVAL 1 DAY)";

    $wpdb->query($sql);
}

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

你把一些事情搞混了。

首先,您的查询检查time_created, 您的表中不存在。

其次,您尝试将日期插入为integer 使用%d. 您可能必须将其视为字符串。

最后,您必须设置$wpdb 在您的职能范围内

function postviews_add_ip () {
    global $post, $wpdb; // Database set to global
        $id = $post->ID;
        $ip = $_SERVER[\'REMOTE_ADDR\'];
        $time = date("Y-m-d H:i:s");

    $wpdb->insert( 
        \'wp_postviews_ips\', 
        array( 
            \'postid\' => $id,
            \'ip\' => $ip,
            \'time\' => $time
        ), // added a colon
        array(
            \'%d\',
            \'%s\', 
            \'%s\' // treat it as a string
        ) 
    );

    $sql = "DELETE FROM wp_postviews_ips WHERE time < (NOW() - INTERVAL 1 DAY)"; //changed rowname

    $wpdb->query($sql);
}
我强烈建议划分插入和删除的功能。你可以使用wp-cron 用于删除,因此您不必一直调用此函数。函数本身应该以这种方式工作-但请确保对其进行优化:)

结束

相关推荐

存档-posttype.php未加载

我创建了自定义帖子类型add_action(\'after_setup_theme\', \'cptui_register_my_cpt_packaged\'); function cptui_register_my_cpt_packaged() { register_post_type(\'packaged\', array( \'label\' => \'Packaged Foods\', \'description\' => \'\', \'pub