wordpress文章标题重复解决方案

问题: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');
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注