Вопрос или проблема
Сейчас я создаю плагин для WordPress. Мне нужно добавить метабокс на страницу подменю администратора. Я пытался сделать это следующим образом:
add_action( 'add_meta_boxes', 'add_meta_boxs');
function add_meta_boxs()
{
add_meta_box( 'my-meta-box-id', 'My First Meta Box', 'meta_box', 'myContactForm', 'normal', 'high' );
}
Я создал страницу подменю:
add_submenu_page( 'myForm', 'Add New' , 'Add New', 'manage_options', 'newForm', 'newform_page');
function newform_page()
{
<div class="form-container-2">
<?php do_meta_boxes('myContactForm', 'normal', null); ?>
</div>
}
Здесь “myContactForm” — это тип пользовательской записи. Метабокс был создан в пользовательском типе записи, но мне нужно, чтобы метабокс создавался в подменю страницы.
Кто-нибудь, помогите мне, пожалуйста.
Метабоксы предназначены для работы с записями и пользовательскими типами записей.
Тем не менее, вы можете заставить их работать на странице настроек, если знаете, что делаете.
Нажмите здесь для примера кода
.
Ответ или решение
Добавление метабокса на страницу меню плагина в WordPress — это интересная задача, которая требует понимания структуры админ-панели WordPress и механизма работы с метабоксами. Хотя метабоксы обычно связаны с постами и типами постов, они могут быть интегрированы и в другие части админ-панели, такие как пользовательские страницы плагинов. Рассмотрим, как это можно осуществить.
Теория
Внутри WordPress метабоксы изначально предназначены для работы с интерфейсом редактирования постов и используются для добавления пользовательских полей или настроек, релевантных к посту. Стандартные функции для создания метабоксов, такие как add_meta_box
, ориентированы на привязку метабокса к определённым экранам редактирования постов.
Однако, если вашей задачей является использование метабоксов в произвольных админ-страницах плагинов, то это возможно за счёт использования функций и хуков WordPress с несколькими модификациями.
Пример
Вы сделали попытку добавить метабокс на странице подменю, используя следующий код:
add_action('add_meta_boxes', 'add_meta_boxs');
function add_meta_boxs() {
add_meta_box('my-meta-box-id', 'My First Meta Box', 'meta_box_callback', 'myContactForm', 'normal', 'high');
}
function meta_box_callback() {
echo '<p>Content of the meta box goes here</p>';
}
add_submenu_page('myForm', 'Add New', 'Add New', 'manage_options', 'newForm', 'newform_page');
function newform_page() {
?><div class="form-container-2"><?php
do_meta_boxes('myContactForm', 'normal', null);
?></div><?php
}
Вы использовали тип поста myContactForm
для отображения метабоксов, но требуется их отображение на странице подменю. Попробуем изменить это для достижения желаемого результата.
Применение
-
Регистрация метабокса для страницы плагина: В самом начале необходимо использовать другой хук, отличный от
add_meta_boxes
, так какadd_meta_boxes
ожидает ID поста для показа метабоксов, а нам нужна пользовательская страница. Вместо этого регистрируем и выводим метабокс на нужной странице через хук меню. -
Функция добавления метабокса:
Мы создадим и привяжем метабокс непосредственно к странице подменю. Обратите внимание, что здесь требуется точное название экрана страницы, которое обычно получается с помощью функции
get_current_screen()
.
add_action('admin_menu', 'register_my_custom_submenu_page');
function register_my_custom_submenu_page() {
add_submenu_page('myForm', 'Add New', 'Add New', 'manage_options', 'newForm', 'newform_page');
}
add_action('load-toplevel_page_myForm', 'add_my_meta_boxes');
function add_my_meta_boxes() {
add_meta_box('my-meta-box-id', 'My First Meta Box', 'my_custom_meta_box_callback', 'newForm', 'normal', 'high');
do_action('add_meta_boxes', 'newForm', null); // Принудительное добавление метабокса
}
function my_custom_meta_box_callback($post) {
echo '<div>Content of my custom meta box.</div>';
}
function newform_page() {
?><div class="form-container-2"><?php
do_meta_boxes('newForm', 'normal', null);
?></div><?php
}
-
Точность при именовании: Важно убедиться, что все идентификаторы, такие как
'newForm'
, используются последовательно и корректно соотносятся с реальными именами экранов или страниц. -
Подключение стилей и скриптов (если необходимо): Не забывайте, что для корректного и стилевого оформления интерфейса лучше использовать хук
admin_enqueue_scripts
для подключения дополнительных CSS и JS файлов. -
Безопасность и тестирование: Убедитесь, что вы проверяете права доступа пользователя в вашей функции (например,
current_user_can('manage_options');
). Также стоит протестировать функциональность на разных уровнях доступа и с разными наборами плагинов, чтобы избежать потенциальных конфликтов.
Таким образом, создание метабоксов на пользовательских страницах плагинов в WordPress требует тщательного управления хуками и идентификаторами, сопряжённых с администрированием страницы. Пользуясь этими рекомендациями, вы сможете гибко расширять функциональность вашей админ-панели, делая решение более интуитивно понятным и функционально богатым.