Как отключить дублирование заголовков в WordPress: шаг за шагом!

Как отключить дублирование заголовков записей в WordPress

По умолчанию в WordPress можно создавать записи с одинаковыми заголовками. Однако, если вы хотите запретить это, то задача оказывается не такой простой, как кажется. В этой статье мы рассмотрим, как можно предотвратить создание записей с одинаковыми заголовками, используя фильтр wp_insert_post_empty_content.

Зачем нужно отключать дублирование заголовков?

Дублирование заголовков может создать путаницу как для вас, так и для ваших читателей. Отключив эту функцию, вы повысите удобство использования сайта и улучшите его SEO.

Как отключить дублирование заголовков записей

Для решения этой задачи мы будем использовать фильтр wp_insert_post_empty_content. Вот как это сделать:

Шаг 1: Добавьте код в файл functions.php

Вам нужно будет добавить следующий код в файл functions.php вашей темы. Этот файл обычно находится в папке с вашей активной темой:

// Запретить одинаковые заголовки записей
add_filter( 'wp_insert_post_empty_content', 'disallow_same_post_title', 10, 2 );

/**
 * Запрещает публикацию записей с одинаковыми заголовками (если такой заголовок
 * уже существует для текущего типа записи).
 *
 * Функция предназначена для использования с хуком:
 *
 *     add_filter( 'wp_insert_post_empty_content', 'disallow_same_post_title', 10, 2 );
 *
 * @param bool  $false    Значение по умолчанию
 * @param array $postarr  Массив данных записи
 *
 * @return bool
 */
function disallow_same_post_title( $false, $postarr ){
    global $wpdb;

    // Проверяем только статус публикации
    if( $postarr['post_status'] !== 'publish' ){
        return $false;
    }

    $AND = [
        $wpdb->prepare(
            'post_title = %s AND post_type = %s AND post_status = %s',
            $postarr['post_title'], $postarr['post_type'], 'publish'
        )
    ];

    // Если это обновление, исключаем ID поста
    if( ! empty( $postarr['ID'] ) ){
        $AND[] = $wpdb->prepare( "ID != %d", $postarr['ID'] );
    }

    // Поиск дублирующего заголовка
    $dupl_post_id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE ". implode( ' AND ', $AND ) );

    if( $dupl_post_id ){

        // Изменяем сообщение об ошибке
        add_filter( 'wp_error_added',
            function( $code, $message, $data, $that ) use ( $dupl_post_id ){
                if ($code === 'empty_content') {
                    $that->errors[$code] = [
                        sprintf(
                            'Дублирующийся заголовок! Запись с таким заголовком уже существует: %s',
                            get_permalink( $dupl_post_id )
                        )
                    ];
                }
            },
            10, 4
        );

        return true; // Останавливаем обработку
    }

    return $false;
}

Шаг 2: Проверьте работоспособность кода

После добавления кода в файл functions.php, попробуйте создать несколько записей с одинаковыми заголовками. Если всё сделано правильно, WordPress должен выдать сообщение о том, что такая запись уже существует.

Дополнительные советы

  • Регулярно обновляйте код: Убедитесь, что ваш код соответствует последним версиям WordPress.
  • Резервные копии: Перед внесением изменений обязательно сделайте резервную копию сайта.

Следуя этим шагам, вы сможете успешно отключить возможность создания записей с одинаковыми заголовками в WordPress. Это простое изменение может значительно улучшить ваш сайт и опыт его пользователей.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *