Возвращает все зарегистрированные типы записей. Либо массивом из их названий, либо массивом из объектов 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>';
Так как по умолчанию функция возвращает лишь массив названий типов записей, то в результате этого кода получим:
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>'; }
Получим:
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>';
Источник: Блог Миши Рудрастых