Вопрос или проблема
Я хотел бы получить список (массив) всех типов записей, которые я зарегистрировал.
Точно я хотел бы получить их слаги.
Может кто-нибудь помочь?
спасибо!
Ответ @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 и его глобальные функции, является ключом к успешной разработке на данной платформе.