Пользовательское отображение перед описанием варианта в переменных продуктах Woocommerce - PullRequest
0 голосов
/ 23 ноября 2018

Мне нужно добавить свою собственную таблицу цен перед описанием варианта продукта в woocommerce.Я сделал это, настроив функцию get_available_variation для class-wc-product-variable.php, которая находится в каталоге , включающем каталог woocommerce.

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

Как изменить эту функцию без взлома woocommerce?

public function get_available_variation( $variation ) {

    if ( is_numeric( $variation ) ) {
        $variation = wc_get_product( $variation );
    }
    if ( ! $variation instanceof WC_Product_Variation ) {
        return false;
    }
    // See if prices should be shown for each variation after selection.
    $show_variation_price = apply_filters( 'woocommerce_show_variation_price', $variation->get_price() === '' || $this->get_variation_sale_price( 'min' ) !== $this->get_variation_sale_price( 'max' ) || $this->get_variation_regular_price( 'min' ) !== $this->get_variation_regular_price( 'max' ), $this, $variation );

    return apply_filters(
        'woocommerce_available_variation', array(
            'attributes'            => $variation->get_variation_attributes(),
            'availability_html'     => wc_get_stock_html( $variation ),
            'backorders_allowed'    => $variation->backorders_allowed(),
            'dimensions'            => $variation->get_dimensions( false ),
            'dimensions_html'       => wc_format_dimensions( $variation->get_dimensions( false ) ),
            'display_price'         => wc_get_price_to_display( $variation ),
            'display_regular_price' => wc_get_price_to_display( $variation, array( 'price' => $variation->get_regular_price() ) ),
            'image'                 => wc_get_product_attachment_props( $variation->get_image_id() ),
            'image_id'              => $variation->get_image_id(),
            'is_downloadable'       => $variation->is_downloadable(),
            'is_in_stock'           => $variation->is_in_stock(),
            'is_purchasable'        => $variation->is_purchasable(),
            'is_sold_individually'  => $variation->is_sold_individually() ? 'yes' : 'no',
            'is_virtual'            => $variation->is_virtual(),
            'max_qty'               => 0 < $variation->get_max_purchase_quantity() ? $variation->get_max_purchase_quantity() : '',
            'min_qty'               => $variation->get_min_purchase_quantity(),
            'price_html'            => $show_variation_price ? '<span class="price">' . $variation->get_price_html() . '</span>' : '',
            'sku'                   => $variation->get_sku(),
            'variation_description' => CUSTOM_PRICE_TABLE($variation) . wc_format_content( $variation->get_description() ),
            'variation_id'          => $variation->get_id(),
            'variation_is_active'   => $variation->variation_is_active(),
            'variation_is_visible'  => $variation->variation_is_visible(),
            'weight'                => $variation->get_weight(),
            'weight_html'           => wc_format_weight( $variation->get_weight() ),
        ), $this, $variation
    );
}

Единственное изменение, которое я должен сделать, это добавить'CUSTOM_PRICE_TABLE ($ Variation)' в описании варианта.

1 Ответ

0 голосов
/ 23 ноября 2018

Вам просто нужно использовать ловушку фильтра woocommerce_available_variation следующим образом:

add_filter( 'woocommerce_available_variation', 'form_to_out_of_stock_product_variations', 10, 3 );
function form_to_out_of_stock_product_variations( $data, $product, $variation ) {
    if( CUSTOM_PRICE_TABLE($variation) )
        $data['variation_description'] = CUSTOM_PRICE_TABLE($variation) . $data['variation_description'],

    return $data;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Должно работать.

...