Вопрос или проблема
Я хочу отобразить список всех мета-боксов каждого поста. Глобальная переменная wp_meta_boxes не выводит ничего на экран. Как я могу вывести значение массива, чтобы получить список всех деталей мета-боксов?
<?php
global $wp_meta_boxes;
pr(wp_meta_boxes);
?>
Но экран пуст, ничего не выводит.
Все мета-боксы хранятся в многомерном массиве, называемом $wp_meta_boxes. Он отображает все мета-боксы, зарегистрированные для конкретного экрана и конкретного контекста.
Используйте следующий код:
function get_meta_boxes( $screen = null, $context="advanced" ) {
global $wp_meta_boxes;
if ( empty( $screen ) )
$screen = get_current_screen();
elseif ( is_string( $screen ) )
$screen = convert_to_screen( $screen );
$page = $screen->id;
return $wp_meta_boxes[$page][$context];
}
Теперь, если вы хотите получить массив, который содержит все мета-боксы с приоритетом “обычный”, вам нужно использовать следующий код:
$dashboard_boxes = get_meta_boxes( 'dashboard', 'normal' );
Ответ или решение
Для того чтобы отобразить список всех зарегистрированных мета-боксов в WordPress, необходимо учитывать, что мета-боксы хранятся в многомерном массиве под названием $wp_meta_boxes
. Однако, чтобы корректно вывести информацию о мета-боксах на экран, важно понимать контекст и экран, для которого они зарегистрированы.
Шаги по отображению мета-боксов
-
Получение текущего экрана: Прежде всего, нужно определить текущий экран, чтобы обратиться к соответствующим мета-боксам. Это можно сделать с помощью функции
get_current_screen()
. -
Определение контекста мета-боксов: Значения для контекста могут включать
normal
,side
, илиadvanced
, каждый из которых представляет определенные области страницы редактирования. -
Извлечение мета-боксов: Мы можем создать функцию
get_meta_boxes()
, которая будет принимать в качестве аргументов название экрана и контекст, а затем возвращать мета-боксы для этого экрана.
Пример кода для отображения мета-боксов
function get_meta_boxes($screen = null, $context = 'advanced') {
global $wp_meta_boxes;
if (empty($screen)) {
$screen = get_current_screen();
} elseif (is_string($screen)) {
$screen = convert_to_screen($screen);
}
$page = $screen->id;
if (isset($wp_meta_boxes[$page][$context])) {
return $wp_meta_boxes[$page][$context];
}
return [];
}
// Вывод мета-боксов
function display_meta_boxes() {
$meta_boxes = get_meta_boxes();
if (!empty($meta_boxes)) {
foreach ($meta_boxes as $meta_box) {
// Здесь можно настроить вывод нужной информации о мета-боксах
echo '<h3>' . esc_html($meta_box['title']) . '</h3>';
// Вывод содержимого мета-бокса можно обрабатывать индивидуально
}
} else {
echo 'Нет зарегистрированных мета-боксов для данного экрана.';
}
}
// Вызов функции для отображения мета-боксов
display_meta_boxes();
Подробное объяснение кода:
-
Функция
get_meta_boxes()
:- Определяет актуальный экран, если он не передан в качестве аргумента.
- Проверяет, существует ли указанный контекст мета-боксов в глобальной переменной
$wp_meta_boxes
. - Возвращает массив мета-боксов для указанного экрана и контекста.
- Если мета-боксы отсутствуют, возвращается пустой массив.
-
Функция
display_meta_boxes()
:- Вызывает
get_meta_boxes()
для получения мета-боксов. - Проходит по мета-боксам и выводит их заголовки.
- Если мета-боксы отсутствуют, выводится сообщение об их отсутствии.
- Вызывает
Заключение
Эти простые шаги позволяют вам получить и отобразить мета-боксы в WordPress. Разумный подход к получению данных улучшает пользовательский интерфейс и помогает избежать возможных ошибок при работе с интерфейсами администрирования. Следуя вышеуказанным рекомендациям, вы сможете эффективно управлять мета-боксами на своих страницах.