WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

get_post_types() WP 2.9.0

Возвращает существующие (зарегистрированные) типы записей. Можно фильтровать вывод по множеству критериев.

✈ 1 раз = 0.00008с = очень быстро | 50000 раз = 0.4с = очень быстро

Хуков нет.

Возвращает

Массив. Список названий типов записей или массив объектов (вывод настраивается в параметре $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'

Примеры

#1. Обычное использование

Выведет зарегистрированные типы записей:

$post_types = get_post_types();

/* Вернет:
Array
(
	[post] => post
	[page] => page
	[attachment] => attachment
	[revision] => revision
	[nav_menu_item] => nav_menu_item
	[article] => article
	[question] => question
)
*/

#2. Выведем на экран список всех зарегистрированных типов записей:

$post_types = get_post_types('','names');

foreach( $post_types as $post_type ) {
  echo $post_type ."\n";
}

/* Выведет:
post
page
attachment
revision
nav_menu_item
article
func
*/

#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( array( 'name'=>'property' ), 'objects' );

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

Код get post types: wp-includes/post.php WP 4.8.1

<?php
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);
}

Cвязанные функции

Из метки: post_type (произвольный тип записи)

Еще из раздела: Типы записей

get_post_types 4 комментария
  • Игорь

    у тебя в описании функции register_post_type есть пример #1 Регистрация нового типа записи
    вставляю этот пример в functions.php, далее сразу после него вставляю код

    $post_types = get_post_types( array( '_builtin' => false ), 'names' );
    print_r($post_types);
    

    да да, print_r в functions.php, не суть. смысл в том, что массив почему-то пустой.

    что-то не так с приоритетами и вордпресс еще не видит созданного post_type?

    если этот print_r вставить, например, в файл 404.php, а затем открыть на сайте любую несуществующую страницу, то там массив будет уже со всеми созданными post_type

    • campusboy1749 cайт: wp-plus.ru

      Значит функция get_post_types вызвалась до того, как были зарегистрированы типы записей.

      1
    • Kama4477

      Там в примере, функция вешается на хук init который срабатывает после подключения functions.php... Я уже не раз об этом писал и в начале описания register_post_type() об этом упоминается. Не понятны мне такие вопросы unknw

  • Пробую получить тип записи с помощью таксономии, ничего не получается. Не подскажите, где собака зарыта?

    $test = get_post_types( array('taxonomies' => array('about_fish') ) );
    
    print_r($test);
    Ответитьмесяц назад #

Здравствуйте, !

Ваш комментарий