Недавно пришлось делать тоже самое, решил тут догнать ответ на вопрос
/**
* Изменяет отображение названий атрибутов в выпадающем списке для выбора вариаций товаров
*/
add_filter( 'woocommerce_variation_option_name', 'air_variation_option_name', 10, 1 );
function air_variation_option_name( $name ) {
if ( ! is_archive() ) { // проверяем, является ли текущая страница архивной страницей
return $name;
}
global $product;
if ( ! is_a( $product, 'WC_Product' ) || ! $product->is_type( 'variable' ) ) {
return $name;
}
$taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_', '', $name ) );
$attribute = $product->get_variation_attribute( $taxonomy );
if ( ! empty( $attribute ) ) {
$name = $attribute;
}
return $name;
}
Правда я сделал без условия if ( ! is_archive() ), а глобально, уберите условие если оно не нужно. Кстати, у вас же не только страница категорий, есть еще теги и поисковая выдача, учтите это.
Недавно пришлось делать тоже самое, решил тут догнать ответ на вопрос
/** * Изменяет отображение названий атрибутов в выпадающем списке для выбора вариаций товаров */ add_filter( 'woocommerce_variation_option_name', 'air_variation_option_name', 10, 1 ); function air_variation_option_name( $name ) { if ( ! is_archive() ) { // проверяем, является ли текущая страница архивной страницей return $name; } global $product; if ( ! is_a( $product, 'WC_Product' ) || ! $product->is_type( 'variable' ) ) { return $name; } $taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_', '', $name ) ); $attribute = $product->get_variation_attribute( $taxonomy ); if ( ! empty( $attribute ) ) { $name = $attribute; } return $name; }Правда я сделал без условия if ( ! is_archive() ), а глобально, уберите условие если оно не нужно. Кстати, у вас же не только страница категорий, есть еще теги и поисковая выдача, учтите это.
/** * Цепляемся к woocommerce_shop_loop_item_title */ add_action( 'woocommerce_shop_loop_item_title', 'air_display_variation_radio_buttons', 30 ); function air_display_variation_radio_buttons() { global $product; if ( ! is_a( $product, 'WC_Product' ) || ! $product->is_type( 'variable' ) ) { return; } $attributes = $product->get_variation_attributes(); $selected_attributes = $product->get_variation_default_attributes(); foreach ( $attributes as $taxonomy => $options ) { $taxonomy_label = wc_attribute_label( $taxonomy ); echo '<div class="air-variation-selector">'; echo '<h3>' . esc_html( $taxonomy_label ) . '</h3>'; foreach ( $options as $option ) { $selected = isset( $selected_attributes[ $taxonomy ] ) && $selected_attributes[ $taxonomy ] === $option; $variation_id = $product->get_matching_variation( array( $taxonomy => $option ) ); if ( $variation_id ) { $variation = wc_get_product( $variation_id ); $price = $variation->get_price_html(); $option_label = apply_filters( 'woocommerce_variation_option_name', $option ); $description = $variation->get_short_description(); echo '<label>'; echo '<input type="radio" name="' . esc_attr( 'attribute_' . $taxonomy ) . '" value="' . esc_attr( $option ) . '" ' . checked( $selected, true, false ) . ' />'; echo '<span>' . esc_html( $option_label ) . '</span>'; if ( $price ) { echo '<span class="price">' . wp_kses_post( $price ) . '</span>'; } if ( $description ) { echo '<span class="description">' . esc_html( $description ) . '</span>'; } echo '</label>'; } } echo '</div>'; } }