Возможно ли добавить произвольные поля к термину атрибута WooCommerce?

30 апр. 2018 г., 23:44:24
Просмотры: 19.9K
Голосов: 6

В Wordpress / WooCommerce, возможно ли добавить произвольные поля к термину атрибута WooCommerce?

Под "атрибутами" я имею в виду общие атрибуты, а не атрибуты в рамках продуктов.

Пожалуйста, посмотрите изображение ниже для более подробной информации:

пример атрибутов WooCommerce

Возможно ли сделать это с помощью плагина ACF (Advanced Custom Fields)?

Спасибо!

0
Все ответы на вопрос 1
7
16

Да, это возможно. И есть простое руководство здесь.

Ниже приведен рабочий код, который вы можете добавить в основной файл темы functions.php:

// Добавляем пользовательский тип правила.
add_filter( 'acf/location/rule_types', function( $choices ){
    $choices[ __("Другое",'acf') ]['wc_prod_attr'] = 'Атрибут товара WC';
    return $choices;
} );

// Добавляем пользовательские значения правила.
add_filter( 'acf/location/rule_values/wc_prod_attr', function( $choices ){
    foreach ( wc_get_attribute_taxonomies() as $attr ) {
        $pa_name = wc_attribute_taxonomy_name( $attr->attribute_name );
        $choices[ $pa_name ] = $attr->attribute_label;
    }
    return $choices;
} );

// Сопоставление пользовательского правила.
add_filter( 'acf/location/rule_match/wc_prod_attr', function( $match, $rule, $options ){
    if ( isset( $options['taxonomy'] ) ) {
        if ( '==' === $rule['operator'] ) {
            $match = $rule['value'] === $options['taxonomy'];
        } elseif ( '!=' === $rule['operator'] ) {
            $match = $rule['value'] !== $options['taxonomy'];
        }
    }
    return $match;
}, 10, 3 );

Вы получите что-то вроде этого на экране создания/редактирования группы полей ACF:

Демонстрация настройки группы полей ACF


ОБНОВЛЕНО 25 сентября 2018 (UTC)

В функции для сопоставления правила на странице редактирования термина $options['ef_taxonomy'] был изменен на $options['taxonomy'] — в то время ключ массива taxonomy не существовал (в моем случае), а сейчас он существует, что, как я думаю, заменяет ключ ef_taxonomy. Спасибо @JordanCarter за обнаружение проблемы с ключом и @VadimH за первоначальное редактирование ответа. =)

В этой функции я также добавил проверку if ( isset( $options['taxonomy'] ) ), чтобы избежать уведомления PHP о "неопределенном" значении. Спасибо @JordanCarter за обнаружение этого.

@VadimH, вы можете использовать get_field( '{ИМЯ}', 'term_{ID ТЕРМИНА}' ) для получения (и отображения) значения поля, например:

$term_id = 123;
$value = get_field( 'мое_поле', 'term_' . $term_id );

См. раздел "Получение значения из разных объектов" в официальной документации функции get_field().

Примечание: Весь код (не только get_field()) был протестирован на ACF 5.7.6 и ACF PRO 5.7.3, с WooCommerce 3.4.5.

1 мая 2018 г. 11:43:54
Комментарии

Опция WC Product Attribute отсутствует в интерфейсе (ACF Pro v.5.7.3; WC v.3.4.3)

Vadim H Vadim H
2 сент. 2018 г. 00:21:17

Это решение сработало для меня, но мне пришлось заменить $options['ef_taxonomy'] на $options['taxonomy'] в фильтре Matching custom rule

Jordan Carter Jordan Carter
19 сент. 2018 г. 00:20:51

Спасибо @JordanCarter. Насколько я помню, этот ключ тогда не был доступен. Поэтому всем, кто это читает: используйте $options['taxonomy'], а не $options['ef_taxonomy']

Sally CJ Sally CJ
19 сент. 2018 г. 05:30:22

@VadimH Я только что протестировал код на ACF 5.7.6 и ACF PRO 5.7.3, с WooCommerce 3.4.5, и код по-прежнему работает хорошо, за исключением $options['ef_taxonomy'], который должен быть $options['taxonomy'].

Sally CJ Sally CJ
19 сент. 2018 г. 05:33:00

@SallyCJ Вообще-то, я столкнулся с сообщением об ошибке на странице отдельного товара, где говорилось, что ключ "taxonomy" не существует. Я обернул весь фрагмент в условный оператор IF с array_key_exists

Jordan Carter Jordan Carter
20 сент. 2018 г. 00:20:53

@SallyCJ Ой, извините, забыл вставить код в functions.php. После исправления $options всё заработало, спасибо (я только что отредактировал этот ответ, сейчас он проходит проверку). Следующий вопрос: как получить значение этого произвольного поля на фронтенде сайта?

Vadim H Vadim H
25 сент. 2018 г. 02:20:59

@VadimH пожалуйста, проверьте обновленный ответ. И спасибо, что заметили это, Jordan.

Sally CJ Sally CJ
25 сент. 2018 г. 05:39:52
Показать остальные 2 комментариев