Добавление метабокса на страницу меню плагинов WordPress

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

Сейчас я создаю плагин для 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 для отображения метабоксов, но требуется их отображение на странице подменю. Попробуем изменить это для достижения желаемого результата.

Применение

  1. Регистрация метабокса для страницы плагина: В самом начале необходимо использовать другой хук, отличный от add_meta_boxes, так как add_meta_boxes ожидает ID поста для показа метабоксов, а нам нужна пользовательская страница. Вместо этого регистрируем и выводим метабокс на нужной странице через хук меню.

  2. Функция добавления метабокса:

    Мы создадим и привяжем метабокс непосредственно к странице подменю. Обратите внимание, что здесь требуется точное название экрана страницы, которое обычно получается с помощью функции 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
}
  1. Точность при именовании: Важно убедиться, что все идентификаторы, такие как 'newForm', используются последовательно и корректно соотносятся с реальными именами экранов или страниц.

  2. Подключение стилей и скриптов (если необходимо): Не забывайте, что для корректного и стилевого оформления интерфейса лучше использовать хук admin_enqueue_scripts для подключения дополнительных CSS и JS файлов.

  3. Безопасность и тестирование: Убедитесь, что вы проверяете права доступа пользователя в вашей функции (например, current_user_can('manage_options');). Также стоит протестировать функциональность на разных уровнях доступа и с разными наборами плагинов, чтобы избежать потенциальных конфликтов.

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

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

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