Icon Picker — поле выбора иконок в ACF

Описание

Поле Icon Picker позволяет легко выбрать Dashicon, изображение из Библиотеки медиа или URL для изображения либо SVG.

Скриншоты

Журнал изменений

  • Добавлено в версии 6.3.0

Настройки

  • Вкладки
    Указывает, какие вкладки должны отображаться для этого экземпляра Icon Picker. Выберите из Dashicons, Библиотеки медиа и URL.

  • Формат возврата
    Указывает формат возвращаемых данных. Выберите String или Array.
    Если выбран String, для Dashicons это будет строка класса dashicon, для Библиотеки медиа — URL вложения, а для URL — значение URL.

Использование в шаблоне

Поле Icon Picker возвращает массив или строковое значение, в зависимости от Формат возврата, выбранного при создании поля.

Если вы выбрали Array, вы получите массив с 2 ключами. Первый ключ — type, а второй — value.

Ключ type указывает тип выбранной иконки и будет одним из следующих:

  • dashicons
  • media_library
  • url

Ключ value будет соответствовать type, то есть dashicon дает строку класса dashicon в качестве значения, а media_library и url — URL в качестве значения.

Если вы выбрали String, вы получите строку в ответе, но значение строки по-прежнему зависит от типа иконки, выбранной в пикере:

  • Dashicon: Значением будет строка класса dashicon.

  • Библиотека медиа: Значением будет URL изображения.

  • URL: Значением будет URL изображения.

Чаще всего вы можете выбрать String в качестве типа возврата, если при настройке поля Icon Picker для вашей группы полей вы также отключили все вкладки, кроме одной. В противном случае, скорее всего, вам лучше использовать Array, чтобы вы могли обрабатывать каждый тип иконки.

Ваш шаблон вывода можно настроить так, чтобы он обрабатывал любой тип иконки, а также оба формата возврата — массив и строку:

<?php
$icon = get_field('my_icon');

// Обработка, если тип возврата — строка.
if ( is_string( $icon ) ) {

   // Если выбран тип Dashicon, значением $icon будет строка класса dashicon.
   // Если выбран тип изображения из Библиотеки медиа, значением $icon будет URL изображения.
   // Если выбран тип URL, значением $icon будет URL изображения.
   echo esc_html( $icon );

} else {
   // Обработка, если тип возврата — массив.

   // Если выбран тип Dashicon, выведите div с классом dashicon.
   if ( 'dashicons' === $icon['type'] ) {
       ?><div class="<?php echo esc_attr( $icon['value'] ); ?>”></div><?php
   }

   // Если выбран тип изображения из Библиотеки медиа, используйте ID вложения, чтобы получить и вывести изображение.
   if ( 'media_library' === $icon['type'] ) {
       $attachment_id = $icon['value'];
       $size = 'full'; // (thumbnail, medium, large, full или произвольный размер)

       $image_html = wp_get_attachment_image( $attachment_id, $size );
       echo wp_kses_post( $image_html );
   }

   // Если выбран тип URL, выведите тег img с этим URL.
   if ( 'url' === $icon['type'] ) {
       $url = $icon['value'];
       ?><img src="<?php echo esc_url( $url ); ?>" alt=""><?php
   }
}

Обратите внимание, что Dashicons обычно используются как имена классов на HTML-элементе и обычно также полагаются на этот CSS-стиль. ACF не подключает этот CSS-стиль, поэтому если вы на него полагаетесь, вам нужно будет подключить его самостоятельно.

Добавление пользовательских вкладок

Поле Icon Picker включает фильтры и action hooks, которые можно использовать для добавления пользовательских вкладок. Ниже приведен базовый пример того, как можно добавить новую вкладку «Cards», дополненную пользовательским набором иконок, загружаемых из PNG-файлов, сохраненных в вашей теме.

Чтобы добавить новую вкладку, сначала определите ее через фильтр acf/fields/icon_picker/tabs:

<?php
function add_cards_icon_picker_tab( array $tabs ): array {
    $tabs['cards'] = 'Карты';
    return $tabs;
}
add_filter( 'acf/fields/icon_picker/tabs', 'add_cards_icon_picker_tab' );

Это добавит новую пустую вкладку в поле Icon Picker. Затем эта пустая вкладка будет искать иконки, переданные через фильтр acf/fields/icon_picker/{$tab_name}/icons, где {$tab_name} — это ключ вкладки, переданный в фильтр выше.

Вы можете предоставить иконки для только что созданной вкладки так:

function add_cards_icons( array $icons ): array {
    // Замените на базовый URL-путь к вашим пользовательским иконкам.
    $base_url = get_template_directory_uri() . '/cards/';

    return array(
        array(
            'url'   => $base_url . 'ace-of-spades-playing-card.png', // URL иконки.
            'key'   => 'ace-of-spades', // Сохраняется как значение в поле Icon Picker.
            'label' => 'Туз пик', // Название карты, используемое в поиске.
        ),
        array(
            'url'   => $base_url . 'eight-of-clubs-playing-card.png',
            'key'   => 'eight-of-clubs',
            'label' => 'Восьмерка треф',
        ),
        array(
            'url'   => $base_url . 'jack-of-hearts-playing-card.png',
            'key'   => 'jack-of-hearts',
            'label' => 'Валет червей',
        ),
    );
}
add_filter( 'acf/fields/icon_picker/cards/icons', 'add_cards_icons' );

Обновлено: 31.05.2026