WordPress检查发布文章是否存在重复标题,同时进行提示

使用 $wpdb->prepare() 函数:在执行 SQL 查询时,使用 $wpdb->prepare() 函数来处理参数。

使用 get_var() 方法:在执行 SQL 查询时,使用 $wpdb->get_var() 方法来获取单个值,而不是使用 $wpdb->get_results() 方法并手动处理结果

使用 $wpdb->prepare() 函数可以防止 SQL 注入,而使用 get_var() 方法可以更直接地获取单个值

同时修复了,接收前端ajax参数这里,我们填写了文章名字后不进行提示的问题。

/**
 * 发表文章时禁止与已存在的标题相重复
 * Modify from Plugin: Duplicate Title Validate
 * Description: This plugin helps to not allow publishing duplicate titles.
 * Author: Hasan Movahed
 * Reviser: WPBOM
 * Version: 1.1
 * Author URI: http://www.wallfa.com
 * Reviser URI: https://wpbom.com/
 * Edit URI: https://wpbom.com/
 */

// 发表文章页面,前端抓取标题并使用AJAX发送请求
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'];
    $post_type = $_POST['post_type'];
    $results = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = %s AND post_title = %s AND ID != %d",
            $post_type,
            $title,
            $post_id
        )
    );
    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;
    $results = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_title = %s AND ID != %d",
            $title,
            $post_id
        )
    );
    if ($results) {
        wp_update_post(array(
            'ID' => $post,
            'post_status' => 'draft'
        ));
        wp_redirect(add_query_arg(array('message' => '10', 'wallfaerror' => '1'), get_edit_post_link($post, 'url')));
        exit;
    }
}

// 文章提交更新后的提示
add_action('admin_notices', 'not_published_error_notice');
function not_published_error_notice()
{
    if (isset($_GET['wallfaerror']) && $_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');
}

 

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

利用 rsync 实现俩台liunx服务器数据对拷备份转移

2024-3-7 0:52:20

站长

服务器物理机和虚拟机

2023-8-19 14:09:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索