如何在INSERT INTO wordpress

时间:2016-05-02 08:51:53

标签: mysql wordpress

我正在尝试将记录插入到wordpress表中,但问题是,它插入了重复的记录。

这是我的SQL查询

$qv = $conn->query("INSERT INTO wp_posts (post_title, post_content, post_name, post_date, post_date_gmt, post_author) VALUES('$title[$i]', '$description[$i]', '$url[$i]', '$date[$i]', '$postdate[$i]', '$author[$i]') ON DUPLICATE KEY UPDATE post_name = post_name");

我不想插入任何重复的记录,如何解决此问题?

3 个答案:

答案 0 :(得分:1)

在列上创建unique key并使用insert ignore代替insert,如下所示

  ("INSERT ignore INTO wp_posts (post_title, post_content, post_name, post_date, post_date_gmt, post_author)
 VALUES('$title[$i]', '$description[$i]', '$url[$i]', '$date[$i]', '$postdate[$i]', '$author[$i]'));

答案 1 :(得分:1)

wp_posts将id作为自动增量主键,并且您的插入查询没有id,因此您的重复约束将不起作用。 如果您想通过帖子标题获得唯一记录,那么您必须在其上创建唯一索引。如有必要,可以将唯一约束应用于多个列的组合。 同样insert ignore将重复记录重复记录而不更新它。您必须在申请中处理它。

查询在MySQL中添加唯一约束

ALTER TABLE wp_posts ADD CONSTRAINT unique_post UNIQUE (post_title,post_name);

答案 2 :(得分:0)

禁止使用标题重复发布

function disallow_posts_with_same_title($messages) {
    global $post;
    global $wpdb ;
    $title = $post->post_title;
    $post_id = $post->ID ;
    $wtitlequery = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_title = '{$title}' AND ID != {$post_id} " ;

    $wresults = $wpdb->get_results( $wtitlequery) ;

    if ( $wresults ) {
        $error_message = 'This title is already used. Please choose another';
        add_settings_error('post_has_links', '', $error_message, 'error');
        settings_errors( 'post_has_links' );
        $post->post_status = 'draft';
        wp_update_post($post);
        return;
    }
    return $messages;

}
add_action('post_updated_messages', 'disallow_posts_with_same_title');