как добавить пользовательское поле метабокса с идентификатором пользовательских полей ACF в разработке WordPress

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

Я новичок в разработке на WordPress, я установил плагин Advanced Custom Fields в своем проекте и создал два текстовых поля: Имя и Электронная почта, а также создал плагин, который создаст метабокс с текстовым полем внутри Поста. Теперь в посте я получу пользовательские поля Имя и Электронная почта, и рядом с ними появится мой пользовательский метабокс, но мне нужно вставить мой метабокс рядом с полем Имя, то есть между полем Имя и полем Электронная почта. Мой код метабокса приведен ниже. Пожалуйста, помогите кто-нибудь

//Создание пользовательского метабокса
function my_notice_meta_box() {
    //$post_type = ['post','acf-field-group'];
    add_meta_box(
        'my-notice',
        __( 'Мое уведомление', 'mymetabox' ),
        'my_notice_meta_box_callback',
        'post'     
    );

}
add_action('add_meta_boxes','my_notice_meta_box'); 

//Для отображения поля ввода метабокса
function my_notice_meta_box_callback() {       
    
    ?>
 
    <p>
        <label><strong><?php _e("Уведомление") ?></strong></label>
        <input type="text" name="meta-text" id="meta-text" value="" />
    </p>
 
    <?php
} 

ACF автоматически добавляет метабокс, поэтому вам не нужно добавлять пользовательский метабокс с вашими полями. Убедитесь, что настройки ‘Расположение’ для вашей группы полей ACF установлены правильно, если он не отображается. (Вы также можете добавить несколько групп полей, если хотите, чтобы поля ACF отображались в разных местах для одного и того же типа поста).

Однако, если вы действительно хотите управлять полями ACF самостоятельно, вы можете обратиться к их документации, чтобы получить информацию о поле с помощью get_field_object и вручную обновить поле с помощью update_field.

https://www.advancedcustomfields.com/resources/get_field_object/

https://www.advancedcustomfields.com/resources/update_field/

Ответ или решение

Вопрос о том, как добавить пользовательское мета-поле в WordPress с использованием плагина Advanced Custom Fields (ACF), требует детального подхода и понимания того, как работает WordPress и его API. Вы упомянули, что хотите разместить ваше пользовательское мета-поле между существующими полями “Имя” и “Email”, созданными с помощью ACF.

1. Основы ACF и Мета-боксов

Прежде всего, необходимо знать, что ACF уже создает свои собственные мета-боксы на основе настроек, которые вы задаете в пользовательском интерфейсе плагина. Однако, если вы все же хотите создать собственный мета-бокс, это возможно.

Ваш код для создания отдельного мета-бокса выглядит следующим образом:

// Создание мета-бокса
function my_notice_meta_box() {
    add_meta_box(
        'my-notice',
        __( 'Мое Уведомление', 'mymetabox' ),
        'my_notice_meta_box_callback',
        'post'
    );
}
add_action('add_meta_boxes', 'my_notice_meta_box');

// Вывод полей мета-бокса
function my_notice_meta_box_callback() {
    ?>
    <p>
        <label><strong><?php _e("Уведомление"); ?></strong></label>
        <input type="text" name="meta-text" id="meta-text" value="" />
    </p>
    <?php
}

Этот код создает новый мета-бокс с текстовым полем "Уведомление", однако он не будет отображаться между полями ACF “Имя” и “Email”. Для этого вам нужно будет использовать хук ACF и выводить ваш мета-бокс в нужной позиции.

2. Встраивание Вашего Мета-бокса

Чтобы разместить пользовательский мета-бокс между полями “Имя” и “Email”, выполните следующий шаг:

  1. Получите значений ACF полей с помощью функции get_field().
  2. Используйте хук acf/render_field или acf/input/admin_enqueue_scripts, чтобы вмешаться в вывод полей ACF или добавить свой пользовательский контент.

Однако, ACF не предлагает функциональности для прямого размещения сторонних мета-боксов внутри их мульти-полей. Вместо этого, мы можем использовать JavaScript для изменения порядка вывода.

3. Пример Рендеринга с Использованием js

add_action('acf/input/admin_footer', 'add_custom_meta_box_js');
function add_custom_meta_box_js() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            // Убедитесь, что находит нужные поля
            var nameField = $('input[name="name"]');
            var emailField = $('input[name="email"]');

            if (nameField.length && emailField.length) {
                // Найдите родительский контейнер полей и вставьте мета-бокс
                $('<div id="my-notice-container"><label><strong>Уведомление</strong></label><input type="text" name="meta-text" id="meta-text" /></div>').insertAfter(nameField.closest('.acf-field'));
            }
        });
    </script>
    <?php
}

4. Сохранение Значения Вашего Мета-бокса

Чтобы сохранить значение вашего мета-бокса, вам нужно будет использовать хуки сохранения постов:

add_action('save_post', 'save_my_notice_meta_box');
function save_my_notice_meta_box($post_id) {
    if (array_key_exists('meta-text', $_POST)) {
        update_post_meta($post_id, 'meta-text', sanitize_text_field($_POST['meta-text']));
    }
}

Заключение

Таким образом, вы сможете добавить своего рода пользовательское поле мета-данных между общеизвестными ACF полями. Этот сценарий сочетает в себе использование ACF для создания и управления полями, а также здоровое количество JavaScript, чтобы правильно разместить ваши кастомные мета-поля.

Не забывайте тестировать функционал на разных версиях вашей темы и WordPress, чтобы убедиться в его стабильной работе.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой.

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

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