问题:wordpress文章标题重复解决方案
实现方案:在发布时检测文章标题,如果文章标题重名,将文章保存至草稿箱。
将如下代码添加到function.php文件中即可。
// 检测重复标题到草稿箱
add_action('admin_print_footer_scripts', 'duplicate_titles_enqueue_scripts', 100);
function duplicate_titles_enqueue_scripts() {
?>
<script>
jQuery(function ($) {
function checkTitleAjax(title, id, post_type) {
var data = {
action: 'title_checks',
post_title: title,
post_type: post_type,
post_id: id
};
$.post(ajaxurl, data, function (response) {
$('#message').remove();
$('#poststuff').prepend('<div id="message" class="updated below-h2 fade"><p>' + response + '</p></div>');
});
}
$('#title').change(function () {
var title = $('#title').val();
var id = $('#post_ID').val();
var post_type = $('#post_type').val();
checkTitleAjax(title, id, post_type);
});
});
</script>
<?php
}
// 接收前端ajax参数
add_action('wp_ajax_title_checks', 'duplicate_title_checks_callback');
function duplicate_title_checks_callback() {
global $wpdb;
$title = $_POST['post_title'];
$post_id = $_POST['post_id'];
$titles = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_title = '{$title}' AND ID != {$post_id}";
$results = $wpdb->get_results($titles);
if ($results) {
echo "<span style='color:red'>" . __('此标题已存在,请换一个标题!', '') . " </span>";
} else {
echo '<span style="color:green">' . __('恭喜,此标题未与其他文章标题重复!', '') . '</span>';
}
die();
}
// 检测后端标题并且避免同名文章更新草稿
add_action('publish_post', 'duplicate_titles_wallfa_bc');
function duplicate_titles_wallfa_bc($post)
{
global $wpdb;
$title = $_POST['post_title'];
$post_id = $post;
$wtitles = "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($wtitles);
if ($wresults) {
$wpdb->update($wpdb->posts, array('post_status' => 'draft'), array('ID' => $post));
$arr_params = array('message' => '10', 'wallfaerror' => '1');
$location = add_query_arg($arr_params, get_edit_post_link($post, 'url'));
wp_redirect($location);
exit;
}
}
// 文章提交更新后的提示
add_action('admin_notices', 'not_published_error_notice');
function not_published_error_notice()
{
if (isset($_GET['wallfaerror']) == 1) {
?>
<div class="updated">
<p style='color:red'><?php _e('貌似已经存在相同标题的文章,若您使用了文章别名作为固定链接,则可以通过修改本文的固定链接来使标题不再重复!', ''); ?></p>
</div>
<?php
}
}
// 禁用自动保存
add_action('wp_print_scripts', 'disable_autosave');
function disable_autosave()
{
wp_deregister_script('autosave');
}