Как отключить дублирование заголовков записей в 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. Это простое изменение может значительно улучшить ваш сайт и опыт его пользователей.