我正在尝试将记录插入到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");
我不想插入任何重复的记录,如何解决此问题?
答案 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');