Отображение определенных атрибутов продукта на страницах архивов Woocommerce

81
6

Я хочу отображать некоторые определенные атрибуты продукта по моему выбору на странице магазина магазина для каждого продукта. Необходимо отобразить имя атрибута и его значение. Я начал писать код, я хотел напечатать хотя бы имена, но я только показываю имя последнего атрибута


add_action('woocommerce_after_shop_loop_item','add_attribute');
function add_attribute() {
global $product;
$weigth_val = $product->get_attribute('weight');
$quant_val = $product->get_attribute('quantity');
$length_val = $product->get_attribute('length');
echo $weigth_val;
echo $quant_val;
echo $length_val;
}

спросил(а) 2018-04-03T15:24:00+03:00 2 года, 6 месяцев назад
1
Решение
91

В woocommerce каждый атрибут продукта является пользовательской таксономией и записывается в базу данных, добавляя pa_ к началу их слизней...


Это имя таксономии должно использоваться с методом WC_Product get_attribute().


Итак, ваш код должен быть:


add_action('woocommerce_after_shop_loop_item','displaying_product_attributes');
function displaying_product_attributes() {
global $product;

$weigth_val = $product->get_attribute('pa_weight');
$quant_val = $product->get_attribute('pa_quantity');
$length_val = $product->get_attribute('pa_length');

echo $weigth_val;
echo $quant_val;
echo $length_val;
}


Теперь он должен работать...

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


add_action('woocommerce_after_shop_loop_item','add_attribute');
function add_attribute() {
global $product;

$product_attributes = array( 'pa_weight', 'pa_quantity', 'pa_length', 'pa_color' );
$attr_output = array();

// Loop through the array of product attributes
foreach( $product_attributes as $taxonomy ){
if( taxonomy_exists($taxonomy) ){
$label_name = get_taxonomy( $taxonomy )->labels->singular_name;
$value = $product->get_attribute('pa_weight');

if( ! empty($value) ){
// Storing attributes for output
$attr_output[] = '<span class="'.$taxonomy.'">'.$label_name.': '.$value.'</span>';
}
}
}

// Output attribute name / value pairs separate by a "<br>"
echo '<div class="product-attributes">'.implode( '<br>', $attr_output ).'</div>';
}


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

ответил(а) 2018-04-03T15:41:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема