Получить список всех зарегистрированных ярлыков типов записей
Я хотел бы получить список (массив) всех типов записей, которые я зарегистрировал.
Точнее, мне нужно получить их ярлыки (slugs).
Может кто-нибудь помочь? Спасибо!
// Решение 1: Получить все типы записей
$post_types = get_post_types();
// Решение 2: Получить только публичные типы записей
$post_types = get_post_types(['public' => true]);
// Решение 3: Получить пользовательские типы записей
$post_types = get_post_types(['_builtin' => false]);
// Теперь у вас есть массив ярлыков типов записей
print_r($post_types);

Ответ @EAMann верен, но в WordPress уже есть встроенная функция для получения всех зарегистрированных типов записей: get_post_types
<?php
// Подключаемся к хуку init поздно, чтобы все уже было зарегистрировано
// Также вы можете использовать get_post_types где угодно. Обычно подходит любое время после init.
add_action( 'init', 'wpse34410_init', 0, 99 );
function wpse34410_init()
{
$types = get_post_types( [], 'objects' );
foreach ( $types as $type ) {
if ( isset( $type->rewrite->slug ) ) {
// Здесь вы, вероятно, захотите сделать что-то еще.
echo $type->rewrite->slug;
}
}
}

Самый простой способ — использовать функцию WordPress get_post_types();
<?php
$get_cpt_args = array(
'public' => true,
'_builtin' => false
);
$post_types = get_post_types( $get_cpt_args, 'objects' ); // используйте 'names', если нужно получить только название типа записи.
// просмотр зарегистрированных типов записей
echo '<pre>';
print_r($post_types);
echo '</pre>';
// выполнение действий с массивом
if ( $post_types ) {
foreach ( $post_types as $cpt_key => $cpt_val ) {
// выполнить действия.
}
}
?>

'object'
в $post_types = get_post_types( $get_cpt_args, 'object' )
следует исправить на множественное число 'objects'
:
$post_types = get_post_types( $get_cpt_args, 'objects' )
ссылка: https://developer.wordpress.org/reference/functions/get_post_types/

Когда вы вызываете функцию register_post_type()
, она добавляет ваш новый тип записи в глобальную переменную $wp_post_types
. Таким образом, вы можете получить список всех ваших типов записей из неё:
function get_registered_post_types() {
global $wp_post_types;
return array_keys( $wp_post_types );
}
Переменная $wp_post_types
представляет собой массив, содержащий определения ваших пользовательских типов записей (CPT), где каждый набор аргументов CPT (метки, возможности и т.д.) сопоставлен с ярлыком (slug) типа записи. Вызов функции array_keys()
вернёт вам массив ярлыков ваших CPT.

Более элегантное решение:
<?php
$cpt_args = [
'public' => true, // Показывать только публичные типы записей
'_builtin' => false // Исключить встроенные типы записей
];
// Получаем массив slug'ов пользовательских типов записей
$type_slugs = array_map( function( $type ) {
return $type->slug; // Возвращаем slug каждого типа записи
}, get_post_types( $cpt_args, 'objects' ) );
