WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

get_post_types()WP 2.9.0

Получает данные (объекты) зарегистрированных типов записей. Не сами записи, а данные регистрации типа записи.

Можно фильтровать вывод по множеству критериев.

Работает на основе: wp_filter_object_list()
1 раз — -0.00003 сек (скорость света) | 50000 раз — 0.24 сек (очень быстро) | PHP 7.4.8, WP 5.6.2

Хуков нет.

Возвращает

Строку[]|WP_Post_Type[]. Список названий типов записей или массив объектов (вывод настраивается в параметре $output).

Использование

get_post_types( $args, $output, $operator );
$args(массив)

Массив критериев, по которым будут выбраны типы записей. Значение каждого параметра смотрите в описании функции register_post_type().

name                 => page
label                => Страницы
labels               => stdClass Object()
description          =>
public               => 1
hierarchical         => 1
exclude_from_search  =>
publicly_queryable   =>
show_ui              => 1
show_in_menu         => 1
show_in_nav_menus    => 1
show_in_admin_bar    => 1
menu_position        => 20
menu_icon            =>
capability_type      => page
map_meta_cap         => 1
register_meta_box_cb =>
taxonomies           => Array()
has_archive          =>
query_var            =>
can_export           => 1
delete_with_user     => 1
_builtin             => 1
_edit_link           => post.php?post=%d
cap                  => stdClass Object(
	edit_post              => edit_page
	read_post              => read_page
	delete_post            => delete_page
	edit_posts             => edit_pages
	edit_others_posts      => edit_others_pages
	publish_posts          => publish_pages
	read_private_posts     => read_private_pages
	read                   => read
	delete_posts           => delete_pages
	delete_private_posts   => delete_private_pages
	delete_published_posts => delete_published_pages
	delete_others_posts    => delete_others_pages
	edit_private_posts     => edit_private_pages
	edit_published_posts   => edit_published_pages
	create_posts           => edit_pages
)

rewrite                =>
show_in_rest           => 1
rest_base              => pages
rest_controller_class  => WP_REST_Posts_Controller
  • 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'

Примеры

0

#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
*/
0

#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
*/
0

#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>';
}
0

#4 Пример, получение типа записи по названию

Здесь используется вывод в виде объекта данных (object). Выводим тип записи с названием property:

$post_types = get_post_types( [ 'name'=>'property' ], 'objects' );

foreach ( $post_types as $post_type ) {
	echo '<p>' . $post_type->name . '</p>';
}
0

#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() WP 6.5.2

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 );
}
3 комментария
    Войти