Хук register_post_type_args
позволяет изменять параметры, передаваемые функции register_post_type()
, при регистрации любого типа записи в WordPress. Этот фильтр срабатывает до того, как параметры типа записи будут окончательно объединены и применены. Это дает возможность модифицировать дефолтные параметры, такие как слаг, метки, доступность для REST API, и многие другие.
apply_filters( ‘register_post_type_args’, array $args, string $post_type )
Этот фильтр срабатывает при регистрации типов записей, позволяя вам изменять или добавлять дополнительные параметры перед их применением. Он предоставляет два параметра:
- $args (array): Массив аргументов, передаваемых в функцию
register_post_type()
для регистрации типа записи. - $post_type (string): Название типа записи, для которого применяется фильтр.
Когда срабатывает хук
- Хук срабатывает при регистрации нового типа записи через
register_post_type()
. - Вы можете использовать его для изменения любых параметров, которые передаются в
register_post_type()
, включая настройку меток, параметров перезаписи URL, доступности REST API и других характеристик.
Пример 1: Изменение меток типа записи
Допустим, вы хотите изменить текст «Записи» в админ-сайдбаре и других местах на «Новости». Это можно сделать с помощью фильтра, который изменяет метки для типа записи «post».
add_filter( 'register_post_type_args', 'filter_register_post_type_args', 10, 2 );
function filter_register_post_type_args( $args, $post_type ) {
if ( 'post' == $post_type ) {
$args['labels'] = [
'name' => 'Новости',
'singular_name' => 'Новость',
];
}
return $args;
}
В этом примере мы заменили стандартные метки для типа записи post
, чтобы они отображались как «Новости» в админке.
Пример 2: Изменение REST маршрута
По умолчанию записи типа post
доступны через REST API по адресу:http://example.com/wp-json/wp/v2/posts
.
Если вы используете записи для публикации новостей, вы можете изменить REST маршрут, чтобы он был более логичным, например, /news
вместо /posts
.
add_filter( 'register_post_type_args', 'change_rest_base_posts', 10, 2 );
function change_rest_base_posts( $args, $post_type ) {
if ( 'post' == $post_type ) {
$args['rest_base'] = 'news';
}
return $args;
}
Этот код изменяет базовый маршрут REST API для типа записи post
, устанавливая его как /news
вместо стандартного /posts
.
Пример 3: Включение архивной страницы для записей
Иногда по умолчанию записи не имеют архива, доступного для отображения на сайте. Чтобы активировать архивную страницу для записей, нужно изменить параметр has_archive
:
add_filter( 'register_post_type_args', 'enable_post_archive', 10, 2 );
function enable_post_archive( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['has_archive'] = 'news'; // Указываем слаг для архива
$args['rewrite'] = true; // Включаем переписку URL
}
return $args;
}
Этот пример позволяет включить архив для записей, где архив будет доступен по URL /news
.
Пример 4: Изменение поведения при удалении записей типа product
Допустим, вы хотите, чтобы при удалении пользователя все записи типа product
также удалялись вместе с ним. Используя фильтр register_post_type_args
, вы можете изменить это поведение.
add_filter( 'register_post_type_args', 'register_post_type_product_args', 10, 2 );
function register_post_type_product_args( $args, $post_type ) {
if ( 'product' === $post_type ) {
$args['delete_with_user'] = true; // Устанавливаем, чтобы записи удалялись вместе с пользователем
}
return $args;
}
Этот фильтр меняет поведение записи типа product
, чтобы она удалялась при удалении пользователя, который её создал.
Пример 5: Добавление пользовательского шаблона для новых записей
Если вам нужно задать шаблон для новых записей типа post
, например, добавить изображение в шапку, это можно сделать через фильтр:
add_filter( 'register_post_type_args', 'set_default_post_template', 10, 2 );
function set_default_post_template( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['template'] = [
[ 'core/post-featured-image', [ 'align' => 'center' ] ]
];
}
return $args;
}
Этот код задаёт дефолтный шаблон для новых записей, где первым блоком будет изображение с выравниванием по центру.
Заключение
Хук register_post_type_args
— это мощный инструмент для кастомизации типов записей в WordPress. Используя этот фильтр, вы можете изменять параметры регистрации типов записей, включая метки, слаги, доступность для REST API, а также поведение при удалении записей. Этот подход позволяет более гибко настроить работу с типами записей, удовлетворяя специфическим требованиям вашего проекта.