get_post_types()
Получает данные (объекты) зарегистрированных типов записей. Не сами записи, а данные регистрации типа записи.
Можно фильтровать вывод по множеству критериев.
Хуков нет.
Возвращает
Строку[]|WP_Post_Type[]
. Список названий типов записей или массив объектов (вывод настраивается в параметре $output
).
Использование
get_post_types( $args, $output, $operator );
- $args(массив)
Массив критериев, по которым будут выбраны типы записей. Значение каждого параметра смотрите в описании функции register_post_type().
- name
- label
- singular_label
- description
- public - Логический, если true, то выбраны будут только публичные типы записей (см. описание
register_post_type()
). - publicly_queryable
- exclude_from_search
- show_ui
- capability_type
- edit_cap
- edit_type_cap
- edit_others_cap
- publish_others_cap
- read_cap
- delete_cap
- hierarchical
- supports
- register_meta_box_cb
- taxonomies
- menu_position
- menu_icon
- permalink_epmask
- rewrite
- query_var
-
_builtin
Логический. Если true, то будут возвращены встроенные типы записей WP: page, posts... false — вернет только новые типы записей.Типы записей относящиеся к критерию
_builtin
:- post
- page
- mediapage
- attachment
- revision
- nav_menu_item — с версии 3.0
- custom post type — с версии 3.0
- _edit_link
По умолчанию: предустановки
- $output(строка)
Как выводить результат. Возможны 2 варианта:
names
— будет возвращен массив имен;objects
— будет возвращен массив объектов с данными типа записи.
По умолчанию: 'names'
- $operator(строка)
- Оператор сравнения для указанных критериев. Может быть: 'and' и 'or'.
По умолчанию: 'and'
Примеры
#1 Выведем на экран список названий всех зарегистрированных типов записей
Выведет зарегистрированные типы записей:
$post_types = get_post_types(); /* $post_types = Array ( [post] => post [page] => page [attachment] => attachment [revision] => revision [nav_menu_item] => nav_menu_item [article] => article [question] => question ) */ foreach( $post_types as $post_type ) { echo $post_type ."\n"; } /* Выведет: post page attachment revision nav_menu_item article func */
#2 Выведем на экран список типов записей имеющих страницу во фронте
Получим все публичные типы записей.
$post_types = get_post_types( [ 'publicly_queryable'=>1 ] ); $post_types['page'] = 'page'; // встроенный тип не имеет publicly_queryable unset( $post_types['attachment'] ); // удалим attachment /* Array [post] => post [custom_type1] => custom_type1 [custom_type2] => custom_type2 [custom_type3] => custom_type3 [page] => page */
#3 Выведем на экран список всех публичных, произвольных (созданных) типов записей
$args = array( 'public' => true, '_builtin' => false ); $output = 'names'; // names or objects, note names is the default $operator = 'and'; // 'and' or 'or' $post_types = get_post_types( $args, $output, $operator ); foreach ( $post_types as $post_type ) { echo '<p>'. $post_type. '</p>'; }
#4 Пример, получение типа записи по названию
Здесь используется вывод в виде объекта данных (object). Выводим тип записи с названием property
:
$post_types = get_post_types( [ 'name'=>'property' ], 'objects' ); foreach ( $post_types as $post_type ) { echo '<p>' . $post_type->name . '</p>'; }
#5 Получим все типы записей, которые используются в REST API
$rest_ptypes = get_post_types( [ 'show_in_rest' => true ], 'names' ); print_r( $rest_ptypes ); /* Array ( [post] => post [page] => page [attachment] => attachment [nav_menu_item] => nav_menu_item [wp_block] => wp_block [wp_template] => wp_template [wp_template_part] => wp_template_part [wp_navigation] => wp_navigation [func] => func [handbook] => handbook [hook] => hook [note] => note [plug] => plug ) */
Заметки
- Global. Массив. $wp_post_types List of post types.
- Смотрите: register_post_type() for accepted arguments.
Список изменений
С версии 2.9.0 | Введена. |
Код get_post_types() get post types WP 6.6.1
function get_post_types( $args = array(), $output = 'names', $operator = 'and' ) { global $wp_post_types; $field = ( 'names' === $output ) ? 'name' : false; return wp_filter_object_list( $wp_post_types, $args, $operator, $field ); }