Как вывести поле ACF в настройках экрана админки?

Ссылка скопирована
1 ответ

Подскажите, пожалуйста, как вывести поле ACF в настройках экрана админки? Это возможно? Мне необходимо для массового редактирования товаров.

Скажем, есть созданное в ACF поле "Страна", где можно выбрать страну происхождения товара. Мне необходимо, чтобы в админке при массовом редактировании товаров, я мог изменить это поле.

Дополнительно:

Для массового редактирования нужно выбирать соответствующие плагины.

  • Refguser, Какой, например?
  • Дмитрий, https://wordpress.org/plugins/search/woocommerce+b...
  • Ответы:

    Здравствуйте, по-моему плагин 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);

    на картинке изображен процесс массового редактирования постов:

    Как вывести поле ACF в настройках экрана админки?

    куда Вы тут хотите встроить текстовое поле для массового редактирования?

    слева от кнопки Apply можно встроить текстовое поле. я это делал на JS. создавал скрипт для админов на JS и подключал его на сайте через functions.php (Enqueue Scripts) . текстовое поле будет находиться внутри html-формы для массового редактирования с выбранным действием.

    И можно его значение обработать в хуке-обработчике действия - выполнить функцию update_field() для Вашего поля ACF в редактируемом посте.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Роман IT Ответ

    ACF-поле в «Настройки экрана» вывести напрямую нельзя. «Настройки экрана» в WordPress управляют видимостью колонок, метабоксов и некоторых элементов интерфейса, а не массовым редактированием произвольных полей. Для вашей задачи нужно добавить поле ACF в quick edit/bulk edit товаров или использовать готовый плагин.

    Самый быстрый вариант — Admin Columns Pro + ACF + WooCommerce. Он умеет показывать ACF-поля в списке товаров, фильтровать и иногда редактировать их прямо из таблицы. Для массового редактирования также смотрят Advanced Bulk Edit, WP Sheet Editor, BEAR WooCommerce Bulk Editor.

    Если делать кодом, нужно:

    1. Добавить колонку «Страна» в список товаров.
    2. Вывести значение ACF в колонке.
    3. Добавить поле в Quick Edit или Bulk Edit.
    4. Сохранить значение через 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);

    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 поле стоит, если это постоянная бизнес-логика проекта и нужно полностью контролировать интерфейс.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно