Получить список слизней для определенного атрибута продукта на страницах архива в Woocommerce


Мне нужно отобразить некоторые пользовательские значки на странице обзор продукта (категория, архив) на основе набора ингредиентов (который является атрибутом продукта Woo).

Я подключаюсь к woocommerce_after_shop_loop_item_title, и это подходящее место для отображения того, что я хочу. Однако я не могу легко получить список слизней для атрибутов. Моя цель - получить массив слизней, похожих на ['onion', 'fresh-lettuce', 'cheese'] или что-то еще.

Моя текущая попытка выглядит примерно так:

add_filter( 'woocommerce_after_shop_loop_item_title', function () {
    global $product;
    $attrs = $product->get_attributes();
    $slugs = $attrs->get_slugs( 'ingredients' );
    var_dump( $slugs );
});

Но это не работает.

Обратите внимание, что $product->get_attributes() работает, но одинаково для каждого продукта на странице категории.

Пожалуйста, посоветуйте!

Author: LoicTheAztec, 2018-06-19

1 answers

Попробуйте выполнить следующие действия с помощью WC_Product get_attribute() метод:

add_filter( 'woocommerce_after_shop_loop_item_title', 'loop_display_ingredients', 15 );
function loop_display_ingredients() {
    global $product;
    // The attribute slug
    $attribute = 'ingredients';
    // Get attribute term names in a coma separated string
    $term_names = $product->get_attribute( $attribute );

    // Display a coma separted string of term names
    echo '<p>' . $term_names . '</p>';
}

Вводится код function.php файл вашей активной дочерней темы (или активной темы). Проверено и работает.


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

// The attribute slug
$attribute = 'ingredients';
// Get attribute term names in a coma separated string
$term_names = $product->get_attribute( $attribute );

// Get the array of the WP_Term objects
$term_slugs = array();
$term_names = str_replace(', ', ',', $term_names);
$term_names_array = explode(',', $term_names);
if(reset($term_names_array)){
    foreach( $term_names_array as $term_name ){
        // Get the WP_Term object for each term name
        $term = get_term_by( 'name', $term_name, 'pa_'.$attribute );
        // Set the term slug in an array
        $term_slugs[] = $term->slug;
    }
    // Display a coma separted string of term slugs
    echo '<p>' . implode(', ', $term_slugs); . '</p>';
}
 2
Author: LoicTheAztec, 2018-06-19 13:37:47