get_post_types()

Возвращает все зарегистрированные типы записей. Либо массивом из их названий, либо массивом из объектов WP_Post_Type. В обоих случаях ключи массивов – это названия типов записей, что очень удобно.

А ещё, рекомендую моё подробное руководство по произвольным типам записей.

get_post_types( $args = array(), $output = 'names', $operator = 'and' )

Параметры

$args
(массив) Критерии, по которым функция будет возвращать типы записей. Параметр принимает значения в виде ассоциативного массива ключ => значение. Ключи и значения – это большинство параметров функции register_post_type(). К примеру можно получить все публичные типы записей, передав array( 'public' => true ).
$output
(строка) Формат, в котором функция должна возвращать результат:
  • names – массив названий типов записей,
  • objects – массив объектов WP_Post_Type типов записей.
$operator
(строка) Оператор соотношения критериев, переданных в первом параметре функции. Может принимать два значения:
  • and – каждый из переданных в первом параметре критериев должен выполняться,
  • or – хотя бы один из переданных в $args критериев должен выполняться.

Примеры

1. Список типов записей на сайте

В качестве самого первого примера давайте попробуем использовать функцию get_post_types() даже без каких-либо параметров.

$post_types = get_post_types();
 
/* Array
(
    [post] => post
    [page] => page
    [attachment] => attachment
    [revision] => revision
    [nav_menu_item] => nav_menu_item
    [custom_css] => custom_css
    [customize_changeset] => customize_changeset
    [oembed_cache] => oembed_cache
    [user_request] => user_request
    [wp_block] => wp_block
    [wp_template] => wp_template
    [wp_template_part] => wp_template_part
    [wp_global_styles] => wp_global_styles
    [wp_navigation] => wp_navigation
    [lead] => lead
) */
 
echo '<ul>';
foreach( $post_types as $post_type ) {
	echo '<li>' . $post_type . '</li>';
}
echo '</ul>';

Так как по умолчанию функция возвращает лишь массив названий типов записей, то в результате этого кода получим:

пример использования функции get_post_types()

2. Выводим только кастомные типы записей

Под кастомными типами записей я подразумеваю те, которые были зарегистрированы вами или каким-то плагином, который вы установили.

То есть это не «Записи» и не «Страницы», и не другие типы записей, которые уже существуют в WordPress из коробки.

Отфильтровать кастомные типы записей от дефолтных можно параметром _builtin.

$args = array(
	'public'   => true,
	'_builtin' => false, // получаем только кастомные типы записей
);
 
$post_types = get_post_types( $args );
 
if ( $post_types ) { // условие тут уже лишним не будет, т.к. кастомных типов постов может и не быть
 
	echo '<ul>';
 
	foreach ( $post_types as $post_type ) {
		echo '<li>' . $post_type . '</li>';
	}
 
	echo '<ul>';
 
}

3. Получение объектов типов постов WP_Post_Type

В предыдущих примерах мы получали только названия типов записей. Давайте сделаем пример чуть интереснее и передадим во второй параметр функции значение objects, чтобы у нас также была возможность получить какую-либо информацию из объектов WP_Post_Type.

$args = array(
    'public' => true,
);
 
$post_types = get_post_types( $args, 'objects' );
 
foreach ( $post_types  as $post_type ) {
	echo '<p>Ярлык типа записи: ' . $post_type->name . "<br />\n";
	echo 'Его название: ' . $post_type->labels->singular_name . '</p>';
}

Получим:

пример использования функции get_post_types() для публичных типов записей
«Лид» – это кстати произвольный тип записи, который мы регистрировали в этом уроке.

4. Исключение типа записи

Что, если нам не хватило всех возможностей параметра $args для того, чтобы вывести интересующие нас типы записей? Мы например можем удалить некоторые из них вручную!

$post_types = get_post_types( 
	array( 
		'public' => true, 
		'_builtin' => true 
	)
);
 
// напрмиер удалим Медиафайлы
unset( $post_types[ 'attachment' ] );
// это кстати работает и при получении типов записей в виде объектов
 
// выводим оставшиеся типы записей, как обычно
echo '<ul>';
foreach ( $post_types as $post_type ) {
	echo '<li>' . $post_type . '</li>';
}
echo '</ul>';

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.