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 ) */
Заметки
- Смотрите: register_post_type() for accepted arguments.
- Global. Массив. $wp_post_types List of post types.
Список изменений
| С версии 2.9.0 | Введена. |
Код get_post_types() get post types WP 6.9
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 );
}