Я хочу показать определенные атрибуты продукта на странице категории в WooCommerce. Атрибуты будут показаны после названия продукта до краткого описания.
pa_nopeus
являются pa_nopeus
, pa_liito
, pa_vakaus
и pa_feidi
. Это только числовые значения. Я просто хочу показать значения, а не имена, примерно так:
Product Name 4 / 4 / 1 / 2 Short description
Если эти значения не существуют в продукте, строка не будет отображаться вообще.
Я хочу добавить это в (шаблон) код, а не с помощью плагина. Я считаю, что он будет добавлен в content-product.php.
#content-product.php start.... do_action( 'woocommerce_shop_loop_item_title' ); VALUES HERE SOMEHOW? /** * woocommerce_after_shop_loop_item_title hook. * * @hooked woocommerce_template_loop_rating - 5 * @hooked woocommerce_template_loop_price - 10 */ do_action( 'woocommerce_after_shop_loop_item_title' ); #rest of the content-product.php...
Как я могу это достичь?
благодаря
Лучший способ сделать то, что вы ожидаете (без переопределения шаблонов), – это использовать функцию, которую мы подключаем к крюку
'woocommerce_shop_loop_item_title'
.
В этом случае код ниже приводится в файле function.php вашей активной дочерней темы (или темы).
Вот код:
// For WooCommerce below version 3.0 add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20 ); function custom_attributes_display(){ // Just for product category archives pages if(is_product_category()){ global $product; // the array of attributes names $attribute_names = array('pa_nopeus', 'pa_liito', 'pa_vakaus', 'pa_feidi'); foreach( $attribute_names as $key => $attribute_name ) { // Getting the value of an attribute $attribute_value = array_shift(wc_get_product_terms( $product->id, $attribute_name)); // Displays only if attribute exist for the product if(!empty($attribute_value) || $attribute_value == '0' ){ // Updated echo $attribute_value; // Separating each number by a " / " if($key < 3) echo ' / '; } } } }
Для woocommerce 3.0+ см .: добавление атрибутов в краткое описание в WooCommerce 3.0+
Таким образом, вы получите сразу после названия, на страницах архивов категорий продуктов, что вы ожидаете.
Или, альтернативно, вы можете использовать приведенный выше код в шаблоне content-product.php
, таким образом:
#content-product.php start.... do_action( 'woocommerce_shop_loop_item_title' ); /////////////// HERE IS THE CODE //////////////// // Just for product category archives pages if(is_product_category()){ global $product; // the array of attributes names $attribute_names = array('pa_nopeus', 'pa_liito', 'pa_vakaus', 'pa_feidi'); foreach( $attribute_names as $key => $attribute_name ) { // Getting the value of an attribute $attribute_value = array_shift(wc_get_product_terms( $product->id, $attribute_name)); // Displays only if attribute exist for the product if(!empty($attribute_value) || $attribute_value == '0' ){ echo $attribute_value; // Separating each number by a " / " if($key < 3) echo ' / '; } } } /** * woocommerce_after_shop_loop_item_title hook. * * @hooked woocommerce_template_loop_rating - 5 * @hooked woocommerce_template_loop_price - 10 */ do_action( 'woocommerce_after_shop_loop_item_title' ); #rest of the content-product.php...
Но первое решение более рекомендуется и элегантно.
Код проверен и работает