Иногда стандартного функционала WordPress для редактирования заголовков постов в админке недостаточно. Например, нужно добавить какой-то дополнительный префикс, суффикс, или полностью заменить заголовок в списке записей и на странице редактирования. В этой статье разберём, как программно изменить отображаемый заголовок поста в админке WordPress с помощью хуков и фильтров, а также приведём несколько практических примеров кода.
Почему может понадобиться менять заголовок поста в админке WordPress
Стандартный заголовок поста в админке берётся из поля post_title таблицы базы данных. Но бывают ситуации, когда нужно:
- Отображать дополнительную информацию в заголовке, например статус или метку;
- Автоматически добавлять префиксы или суффиксы для удобства фильтрации;
- Динамически менять заголовок в зависимости от пользовательских метаданных;
- Переименовывать заголовок для кастомных типов записей или в соответствии с бизнес-логикой проекта.
Для таких задач можно использовать фильтр the_title с проверкой, что мы находимся в админке. Но для изменения заголовков именно в списке постов в админке лучше использовать хук manage_posts_custom_column или фильтр post_title с дополнительными условиями.
Как изменить заголовок поста в списке записей в админке WordPress
Чтобы изменить заголовок в таблице со списком постов, следует использовать фильтр the_title с проверкой контекста админки и типа запроса. Ниже пример функции, которая добавляет префикс [WPBlock] к заголовку всех постов в админке:
function wpblock_admin_modify_post_title( $title, $post_id ) {
if ( is_admin() ) {
$screen = get_current_screen();
if ( $screen && $screen->base === 'edit' ) {
$post = get_post( $post_id );
if ( $post->post_type === 'post' ) {
$title = '[WPBlock] ' . $title;
}
}
}
return $title;
}
add_filter( 'the_title', 'wpblock_admin_modify_post_title', 10, 2 );Обратите внимание, что мы проверяем, что находимся именно на странице редактирования списка постов (edit), чтобы не менять заголовок в публичной части сайта.
Расширение: добавление статуса публикации к заголовку
Можно добавить в заголовок метку статуса поста, чтобы сразу видеть, опубликована запись или находится в черновиках:
function wpblock_admin_add_status_to_title( $title, $post_id ) {
if ( is_admin() ) {
$screen = get_current_screen();
if ( $screen && $screen->base === 'edit' ) {
$post = get_post( $post_id );
if ( $post->post_type === 'post' ) {
$status_label = '';
switch ( $post->post_status ) {
case 'draft':
$status_label = ' (Черновик)';
break;
case 'pending':
$status_label = ' (На проверке)';
break;
case 'publish':
$status_label = ' (Опубликовано)';
break;
}
$title .= $status_label;
}
}
}
return $title;
}
add_filter( 'the_title', 'wpblock_admin_add_status_to_title', 10, 2 );Как изменить заголовок поста на странице редактирования записи в админке
Если нужно изменить заголовок, который отображается в поле редактирования записи (input с id title), то тут задача сложнее, поскольку WordPress загружает заголовок из базы и выводит его в текстовом поле.
Для этого можно использовать JavaScript, добавляемый через хук admin_enqueue_scripts. Ниже пример, который заменит заголовок на странице редактирования поста на кастомный текст:
function wpblock_admin_change_edit_title_js( $hook ) {
if ( $hook === 'post.php' || $hook === 'post-new.php' ) {
wp_enqueue_script( 'wpblock-admin-title', plugin_dir_url( __FILE__ ) . 'js/wpblock-admin-title.js', array( 'jquery' ), null, true );
}
}
add_action( 'admin_enqueue_scripts', 'wpblock_admin_change_edit_title_js' );В файле js/wpblock-admin-title.js пишем:
jQuery(document).ready(function($) {
var originalTitle = $('#title').val();
var newTitle = '[WPBlock] ' + originalTitle;
$('#title').val(newTitle);
});Таким образом, при загрузке страницы редактирования заголовок будет автоматически дописываться префиксом [WPBlock]. Аналогично можно делать и другие модификации.
Изменение заголовка для кастомных типов записей и с учётом метаданных
Для кастомных типов записей часто нужно менять заголовок в зависимости от пользовательских полей. Например, если у записи есть метаполе _wpblock_custom_title, использовать его вместо стандартного заголовка.
function wpblock_custom_post_type_title( $title, $post_id ) {
if ( is_admin() ) {
$screen = get_current_screen();
if ( $screen && $screen->base === 'edit' ) {
$post = get_post( $post_id );
if ( $post->post_type === 'my_custom_type' ) {
$custom_title = get_post_meta( $post_id, '_wpblock_custom_title', true );
if ( ! empty( $custom_title ) ) {
$title = $custom_title;
}
}
}
}
return $title;
}
add_filter( 'the_title', 'wpblock_custom_post_type_title', 10, 2 );Такой подход позволяет гибко управлять заголовками записей прямо из метаданных, не меняя при этом содержимое основной записи.
Советы по отладке и безопасности
При работе с изменением заголовков в админке обращайте внимание на производительность, особенно если фильтр применяется к большому количеству записей. Желательно минимизировать запросы к базе и кешировать результаты.
Также будьте внимательны с безопасностью: не выводите в заголовках пользовательский ввод без фильтрации и экранирования, чтобы избежать XSS-уязвимостей.
Рекомендуемые плагины для расширения возможностей админки WordPress
Если хочется расширить функционал без программирования, можно обратить внимание на следующие плагины:
- Admin Columns — добавляет удобные колонки и позволяет настраивать отображение заголовков и других полей;
- Clearfy Pro — оптимизация и настройка админки, включая возможности кастомизации интерфейса;
- Тема Reboot — современный дизайн админки с дополнительными настройками.
Использование готовых решений поможет быстро добиться нужного результата без глубоких знаний кода.