Получить список всех зарегистрированных ярлыков типов записей

21 нояб. 2011 г., 21:18:55
Просмотры: 20.7K
Голосов: 6

Я хотел бы получить список (массив) всех типов записей, которые я зарегистрировал.

Точнее, мне нужно получить их ярлыки (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);
0
Все ответы на вопрос 4
1
11

Ответ @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;
        }
    }
}
21 нояб. 2011 г. 21:53:22
Комментарии

СОВЕТ: Вам не нужно вызывать get_post_type_object, если вы установите параметр get_post_types для возврата объектов, например: $types = get_post_types( '', 'objects' );

t31os t31os
23 нояб. 2011 г. 11:53:46
1

Самый простой способ — использовать функцию 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 ) {
       // выполнить действия.
    }
}
?>
23 янв. 2017 г. 08:28:55
Комментарии

'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/

Pea Pea
25 сент. 2024 г. 06:27:06
1

Когда вы вызываете функцию 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.

21 нояб. 2011 г. 21:38:12
Комментарии

если заглянуть в wp-includes/post.php, встроенная функция get_post_types() возвращает тот же самый `global $wp_post_types` массив. зачем создавать новую функцию, если у нас уже есть встроенная?

Aamer Shahzad Aamer Shahzad
3 нояб. 2021 г. 09:19:32
0
-1

Более элегантное решение:

<?php
$cpt_args = [
    'public'   => true,    // Показывать только публичные типы записей
    '_builtin' => false    // Исключить встроенные типы записей
];

// Получаем массив slug'ов пользовательских типов записей
$type_slugs = array_map( function( $type ) {
    return $type->slug;    // Возвращаем slug каждого типа записи
}, get_post_types( $cpt_args, 'objects' ) );
8 июн. 2017 г. 12:31:15