Как отобразить поле ACF в разделе настроек административной панели?

Как вывести поле ACF в настройках экрана админки для массового редактирования товаров? Мне нужно изменить поле "Страна" при массовом редактировании товаров.
  • 20 сентября 2023 г. 11:27
Ответы на вопрос 2
Для отображения поля ACF в разделе настроек административной панели и в настройках экрана админки для массового редактирования товаров вам понадобится использовать функцию `acf_add_options_sub_page` и хуки `admin_init` и `admin_menu`.

Вот пример кода:

```php
// Добавление подстраницы в раздел "Настройки"
function acf_add_custom_options_page() {
    acf_add_options_sub_page(array(
        'title' => 'Настройки',
        'menu_slug' => 'custom-settings',
        'parent_slug' => 'edit.php?post_type=product',
        'capability' => 'edit_posts',
    ));
}
add_action('admin_menu', 'acf_add_custom_options_page');

// Регистрация полей ACF на странице "Настройки"
function acf_add_custom_fields() {
    if( function_exists('acf_add_local_field_group') ):

        acf_add_local_field_group(array(
            'key' => 'group_5e8a59e9e6614',
            'title' => 'Настройки товаров',
            'fields' => array(
                array(
                    'key' => 'field_5e8a4f54cc3d8',
                    'label' => 'Страна',
                    'name' => 'country',
                    'type' => 'text',
                ),
            ),
            'location' => array(
                array(
                    array(
                        'param' => 'options_page',
                        'operator' => '==',
                        'value' => 'custom-settings',
                    ),
                ),
            ),
        ));

    endif;
}
add_action('acf/init', 'acf_add_custom_fields');

// Отображение поля ACF при массовом редактировании товаров
function acf_add_custom_column($columns) {
    $columns['country'] = 'Страна';
    return $columns;
}
add_filter('manage_edit-product_columns', 'acf_add_custom_column', 10, 1);

// Заполнение значения поля ACF при массовом редактировании товаров
function acf_manage_custom_column($column, $post_id) {
    if ($column == 'country') {
        $country = get_field('country', $post_id);
        echo $country;
    }
}
add_action('manage_product_posts_custom_column', 'acf_manage_custom_column', 10, 2);
```

В приведенном коде указано:

1. Создание подстраницы "Настройки" в разделе "Товары" административной панели.

2. Регистрация поля "Страна" на странице "Настройки" с помощью функции `acf_add_local_field_group()`.

3. Добавление столбца "Страна" при массовом редактировании товаров с помощью функции `acf_add_custom_column()`.

4. Заполнение значения поля "Страна" при массовом редактировании товаров с помощью функции `acf_manage_custom_column()`.

Вы можете изменить названия полей и параметры функций, чтобы соответствовать вашим требованиям.
Доступные фильтры: 
bulk_actions-edit-post: Редактирование типа записи "post"
bulk_actions-edit-page: Редактирование типа записи "page"
bulk_actions-edit-: Редактирование пользовательского типа записи
bulk_actions-edit-: Редактирование пользовательской таксономии
bulk_actions-edit-comments: Список комментариев
bulk_actions-plugins: Список плагинов
bulk_actions-users: Список пользователей
bulk_actions-upload: Медиабиблиотека (работает только в виде списка, а не в виде сетки)

Примеры:

Добавление пункта меню:
 $post_id,
				'post_status' => 'publish'
			]);
		}
		$redirect_url = add_query_arg('changed-to-published', count($post_ids), $redirect_url);
	}
	return $redirect_url;
}, 10, 3);

Вывод уведомления при выборе действия:
add_action('admin_notices', function() {
	if (!empty($_REQUEST['changed-to-published'])) {
		$num_changed = (int) $_REQUEST['changed-to-published'];
		printf('

' . __('Опубликовано %d записей.', 'txtdomain') . '

', $num_changed); } }); Пример обработчика пункта меню: add_filter('handle_bulk_actions-edit-post', function($redirect_url, $action, $post_ids) { if ($action == 'mark-as-verified') { foreach ($post_ids as $post_id) { update_post_meta($post_id, 'verified', '1'); } $redirect_url = add_query_arg('mark-as-verified', count($post_ids), $redirect_url); } return $redirect_url; }, 10, 3); Как добавить текстовое поле для массового редактирования: Слева от кнопки "Применить" можно встроить текстовое поле. Это можно сделать с помощью JavaScript, создав скрипт в админке и подключив его через functions.php (с помощью функции Enqueue Scripts). Текстовое поле будет располагаться внутри формы для массового редактирования со выбранным действием. Чтобы обработать значение текстового поля в обработчике действия, можно использовать функцию update_field() для обновления значения вашего поля ACF в редактируемой записи.
Похожие вопросы