Недавно я столкнулся с такой ситуацией, что я использовал функцию get_post_types()
со следующим набором параметров:
$post_types = get_post_types( array( 'public' => true ) );
Однако эта функция не возвращала мне все типы записей, которые были доступны в админке! Почему? А потому что при регистрации типа записи параметр public
был установлен в значение false
, но при этом такие параметры, как show_ui
и show_in_menu
– true
.
Ну а суть в том, что get_post_types()
не позволяет задать ИЛИ-условия, и как же мне получить все типы записей, которые мне нужны? Единственным логичным вариантом кажется изменение параметров типа записи при его регистрации, то есть вернуть ему public => true
. А как сделать это для уже зарегистрированного типа записи? Хук register_post_type_args
отлично для этого подойдёт!
Пример с параметром public
:
add_filter( 'register_post_type_args', 'true_cpt_args', 10, 2 ); function true_cpt_args( $args, $post_type ) { if( $post_type !== 'НАЗВАНИЕ ТИПА ЗАПИСИ' ) { return $args; } $args[ 'public' ] = true; return $args; }
Не забывайте про условие, которое находится на 5-й строчке, иначе мы просто изменим параметр для всех существующих типов записей. Конечно, вы можете попробовать это сделать, если будет желание устроить на сайте небольшой коллапс.