Вопрос или проблема
Я пытаюсь добавить метабокс на страницу опций, которую я создал с помощью ACF. Я попробовал практически все, но безуспешно. Я создавал множество метабоксов с помощью пользовательских типов записей, но никогда с помощью страниц опций. Ниже приведен код, с которым я пытался работать.
add_action( 'admin_init', 'adding_businessHours_shortcode' );
function adding_businessHours_shortcode( ) {
// Я пытался добавить страницу с помощью следующего
$pages = array(
'theme-options_page_theme_business_hours',
'admin.php?page=theme_business_hours',
'theme_business_hours'
);
add_meta_box( 'businessHoursShortcodes', __( 'Shortcodes', 'theme' ), 'displayBusinessShortcodes', $pages, 'normal', 'low' );
}
function displayBusinessShortcodes(){
// содержание здесь
}
Я считаю, что вам понадобится ACF Pro, чтобы это заработало.
Если вы посмотрите в: /plugins/advanced-custom-fields-pro/pro/admin/views/html-options-page.php line: 34
– вы увидите, как они выводят свои собственные метабоксы с идентификатором экрана: “acf_options_page”
Я просмотрел предоставленные комментарии/ссылки и нашел их запутанными. Вот что-то простое, что работает с ACF Pro (поместите это в /child-theme/functions.php) или адаптируйте в плагин для собственного использования:
//Добавить страницу опций ACF
if( function_exists('acf_add_options_page') ) {
acf_add_options_page( array(
'page_title' => 'Моя страница опций',
'menu_title' => 'Моя страница опций',
'capability' => 'manage_options',
'menu_slug' => 'my-acf-options-page',
) );
}
//Добавить метабокс, если мы находимся на нашей странице опций
add_action('admin_init', function() {
if ($_GET['page'] !== 'my-acf-options-page') return;
add_meta_box( 'my-options-page-metabox', "Заголовок метабокса", 'my_options_page_content_callback', 'acf_options_page', 'normal', 'high' );
});
//Callback для вывода содержимого метабокса
function my_options_page_content_callback() {
?>
<h2>Ваше содержимое метабокса здесь</h2>
<?php
}
.
Ответ или решение
Добавление метабокса на страницу настроек может показаться сложной задачей, особенно если вы ранее использовали их только с пользовательскими типами записей в WordPress. Тем не менее, ACF Pro предоставляет возможность работать с такими страницами, и в данной статье мы рассмотрим, как это можно сделать.
Теория
В ACF Pro вы можете создавать собственные страницы настроек, используя функцию acf_add_options_page()
. Однако, когда дело касается добавления метабоксов к этим страницам, необходимо использовать правильные идентификаторы экранов и соблюдать некоторые особенности ACF. В отличие от стандартных экранов редактирования в WordPress, где используются типы записей для создания уникальных идентификаторов экранов, страницы настроек в ACF используют экран ID acf_options_page
.
Добавление метабоксов к страницам настроек немного отличается от добавления их к стандартным страницам редактирования записей. Отличие заключается в том, что опции страниц не используют стандартные хуки, которые управляют обычными метабоксами, что может вызвать определенные сложности у разработчиков, которые впервые сталкиваются с этой задачей.
Пример
Для того чтобы успешно добавить метабокс на страницу настроек, выполните следующие шаги:
-
Создайте страницу настроек с помощью ACF
Убедитесь, что у вас установлен и активен ACF Pro.
if( function_exists('acf_add_options_page') ) { acf_add_options_page( array( 'page_title' => 'Моя страница опций', 'menu_title' => 'Мои опции', 'capability' => 'manage_options', 'menu_slug' => 'моя-страница-опций-acf', ) ); }
-
Добавьте метабокс на созданную страницу
Используйте хук
admin_init
для добавления метабокса. Важно проверить, что текущая страница является страницей опций, прежде чем добавлять метабокс.add_action('admin_init', function() { if (!isset($_GET['page']) || $_GET['page'] !== 'моя-страница-опций-acf') return; add_meta_box( 'мой-метабокс-на-странице-опций', 'Заголовок метабокса', 'мой_callback_метабокса', 'acf_options_page', 'normal', 'high' ); }); function мой_callback_метабокса() { echo '<h2>Содержимое вашего метабокса здесь</h2>'; }
Применение
Эти принципы дают возможность кастомизировать страницы настроек, добавляя необходимые вам элементы интерфейса. Вышеуказанный код предоставит метабокс только на конкретной странице настроек, созданной с помощью ACF. Это позволяет легко добавлять управляющие элементы, текстовые блоки или другие элементы интерфейса для администрирования сайта.
Вы можете использовать данный подход для создания разделов настроек сайта, которые могут быть специфичны под пользовательские нужды. Такие страницы могут включать дополнительные опции, такие как короткие коды, пункты дополнительной информации и прочие административные функции, которые помогут владельцам сайтов или их администраторам в выполнении текущих задач.
Заключение
Грамотное использование ACF и понимание его особенностей может значительно расширить функциональность вашего сайта на WordPress. Если вы следуете рекомендациям по добавлению метабоксов к страницам опций, это позволит вам создавать богатые и управляемые интерфейсы для настройки сайта, что в свою очередь повысит его удобство и ценность для конечных пользователей.