WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как вывести вариации товара на странице категории wc радио кнопками?

Как вывести вариации товара на странице категории wc радио кнопками?

0
anonym
1.2 года назад
  • 2
    Dan Zakirov546 air-wp.com

    Недавно пришлось делать тоже самое, решил тут догнать ответ на вопрос

    /**
     * Изменяет отображение названий атрибутов в выпадающем списке для выбора вариаций товаров
     */
    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>';
    	}
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация