Как вывести поле ACF в настройках экрана админки?
Подскажите, пожалуйста, как вывести поле ACF в настройках экрана админки? Это возможно? Мне необходимо для массового редактирования товаров.
Скажем, есть созданное в ACF поле "Страна", где можно выбрать страну происхождения товара. Мне необходимо, чтобы в админке при массовом редактировании товаров, я мог изменить это поле.
Дополнительно:
Для массового редактирования нужно выбирать соответствующие плагины.
Ответы:
Здравствуйте, по-моему плагин Admin Columns с плагином для ACF будет решать эту задачу
Доступные фильтры:
bulk_actions-edit-post: Post type ‘post’ edit screen
bulk_actions-edit-page: Post type ‘page’ edit screen
bulk_actions-edit-: Custom post type edit screen
bulk_actions-edit-: Custom taxonomy edit screen
bulk_actions-edit-comments: Comments list screen
bulk_actions-plugins: Plugins list screen
bulk_actions-users: Users list screen
bulk_actions-upload: Media library list (only works in list view, not grid view)
Примеры:
Добавляет пункт меню:
<?php add_filter('bulk_actions-edit-post', function($bulk_actions) { $bulk_actions['change-to-published'] = __('Change to published', 'txtdomain'); return $bulk_actions; }); |
<?php add_filter('bulk_actions-edit-post', function($bulk_actions) { $bulk_actions['change-to-published'] = __('Change to published', 'txtdomain'); return $bulk_actions; });
Обработчик пункта меню:
add_filter('handle_bulk_actions-edit-post', function($redirect_url, $action, $post_ids) { if ($action == 'change-to-published') { foreach ($post_ids as $post_id) { wp_update_post([ 'ID' => $post_id, 'post_status' => 'publish' ]); } $redirect_url = add_query_arg('changed-to-published', count($post_ids), $redirect_url); } return $redirect_url; }, 10, 3); |
add_filter('handle_bulk_actions-edit-post', function($redirect_url, $action, $post_ids) { if ($action == 'change-to-published') { foreach ($post_ids as $post_id) { wp_update_post([ 'ID' => $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('<div id="message" class="updated notice is-dismissable"><p>' . __('Published %d posts.', 'txtdomain') . '</p></div>', $num_changed); } }); |
add_action('admin_notices', function() { if (!empty($_REQUEST['changed-to-published'])) { $num_changed = (int) $_REQUEST['changed-to-published']; printf('<div id="message" class="updated notice is-dismissable"><p>' . __('Published %d posts.', 'txtdomain') . '</p></div>', $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); |
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);
на картинке изображен процесс массового редактирования постов:
куда Вы тут хотите встроить текстовое поле для массового редактирования?
слева от кнопки Apply можно встроить текстовое поле. я это делал на JS. создавал скрипт для админов на JS и подключал его на сайте через functions.php (Enqueue Scripts) . текстовое поле будет находиться внутри html-формы для массового редактирования с выбранным действием.
И можно его значение обработать в хуке-обработчике действия - выполнить функцию update_field() для Вашего поля ACF в редактируемом посте.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

ACF-поле в «Настройки экрана» вывести напрямую нельзя. «Настройки экрана» в WordPress управляют видимостью колонок, метабоксов и некоторых элементов интерфейса, а не массовым редактированием произвольных полей. Для вашей задачи нужно добавить поле ACF в quick edit/bulk edit товаров или использовать готовый плагин.
Самый быстрый вариант — Admin Columns Pro + ACF + WooCommerce. Он умеет показывать ACF-поля в списке товаров, фильтровать и иногда редактировать их прямо из таблицы. Для массового редактирования также смотрят Advanced Bulk Edit, WP Sheet Editor, BEAR WooCommerce Bulk Editor.
Если делать кодом, нужно:
update_field().Колонка:
add_filter('manage_product_posts_columns', function ($columns) { $columns['country'] = 'Страна'; return $columns; }); add_action('manage_product_posts_custom_column', function ($column, $post_id) { if ($column === 'country') { echo esc_html(get_field('country', $post_id)); } }, 10, 2);
Массовое редактирование сложнее: нужно добавить HTML-поле в bulk edit форму и обработать сохранение для всех выбранных товаров. Если поле ACF имеет тип select, важно сохранять допустимое значение, а не произвольную строку.
Для разовой или периодической массовой правки я бы выбрал WP Sheet Editor или Admin Columns Pro. Писать своё bulk edit поле стоит, если это постоянная бизнес-логика проекта и нужно полностью контролировать интерфейс.