Как вывести поле ACF в настройках экрана админки для массового редактирования товаров? Мне нужно изменить поле "Страна" при массовом редактировании товаров.
Для отображения поля 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 в редактируемой записи.