Хук 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, а также поведение при удалении записей. Этот подход позволяет более гибко настроить работу с типами записей, удовлетворяя специфическим требованиям вашего проекта.
