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

Вопрос или проблема

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

Точно я хотел бы получить их слаги.

Может кто-нибудь помочь?
спасибо!

Ответ @EAMann верен, но уже существует встроенная функция WordPress для получения всех зарегистрированных типов записей: get_post_types

<?php
// подключиться к инициализации поздно, чтобы все было зарегистрировано
// вы также можете использовать get_post_types в любом месте. Обычно любое время после инициализации подходит.
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 ) {
       // сделайте что-то.
    }
}
?>

Когда вы вызываете 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 (ярлыки, возможности и т.д.) сопоставленных со слагом CPT. Вызов array_keys() даст вам массив слагов ваших CPT.

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

<?php
$cpt_args = [
    'public'   => true,
    '_builtin' => false
];

$type_slugs = array_map( function( $type ) {
    return $type->slug;
}, get_post_types( $cpt_args, 'objects' ) );

Ответ или решение

Чтобы получить список всех зарегистрированных слогов пользовательских типов записей (CPT) в WordPress, вы можете использовать встроенные функции платформы. Это позволит вам не только извлечь нужные данные, но и оптимизировать код для повышения производительности вашего проекта. В данном ответе мы рассмотрим несколько подходов для достижения этой цели.

1. Использование функции get_post_types()

Наиболее простым и предпочтительным способом получения всех зарегистрированных типов записей является использование функции get_post_types(). Данная функция возвращает массив с информацией о типах записей, что позволяет легко извлечь нужные нам слоги.

Пример кода:

<?php
// Задаем параметры для выборки
$cpt_args = array(
    'public'   => true,   // Получить только публичные типы записей
    '_builtin' => false    // Исключаем встроенные типы записей (посты, страницы и т.д.)
);

// Получаем список пользовательских типов записей
$post_types = get_post_types($cpt_args, 'objects');

// Инициализируем массив для хранения слогов
$type_slugs = array();

// Извлекаем слоги из массива
foreach ($post_types as $type) {
    $type_slugs[] = $type->rewrite['slug']; // Добавляем слог в массив
}

// Выводим массив слогов
echo '<pre>';
print_r($type_slugs);
echo '</pre>';
?>

2. Использование глобальной переменной $wp_post_types

Кроме использования функции, вы также можете обращаться к глобальной переменной $wp_post_types, которая хранит все зарегистрированные типы записей. Это может быть полезно, если вы хотите получить больше информации о типах записей, а не только их слоги.

Пример кода:

<?php
function get_registered_post_types() {
    global $wp_post_types; // Доступ к глобальным типам записей
    return array_keys($wp_post_types); // Получаем ключи (слоги) всех зарегистрированных типов записей
}

// Получаем слоги
$registered_slugs = get_registered_post_types();

// Выводим слоги
echo '<pre>';
print_r($registered_slugs);
echo '</pre>';
?>

3. Элегантное решение с использованием array_map()

Для более компактного и элегантного кода, можно использовать функцию array_map() для извлечения слогов:

Пример кода:

<?php
$cpt_args = array(
    'public'   => true,
    '_builtin' => false
);

$type_slugs = array_map(function($type) {
    return $type->rewrite['slug']; // Возвращаем слог каждого типа
}, get_post_types($cpt_args, 'objects')); // Получаем массив типов записей

// Выводим массив слогов
echo '<pre>';
print_r($type_slugs);
echo '</pre>';
?>

Заключение

Получение списка слогов всех зарегистрированных пользовательских типов записей в WordPress — это простая задача, которая может быть выполнена с помощью нескольких различных подходов. Важно выбирать метод, который соответствует вашим потребностям и уровню сложности проекта.

Эти методы не только обеспечивают эффективное извлечение данных, но и оптимизируют вашу кодовую базу, делая её более читаемой и поддерживаемой. Понимание того, как работает WordPress и его глобальные функции, является ключом к успешной разработке на данной платформе.

Оцените материал
Добавить комментарий

Капча загружается...