Проверьте размер, атрибуты и / или вес, прежде чем показывать дополнительную информацию в WooCommerce - PullRequest
0 голосов
/ 03 декабря 2018

По умолчанию WooCommerce использует вкладки (Дополнительная информация, Описание и обзоры), и с помощью приведенного ниже кода я удалил вкладки и поместил их содержимое на страницу продукта с помощью хука woocommerce_after_single_product_summary.

Как вы можете видеть из кода, я решил НЕ отображать содержимое дополнительной информации, поскольку не могу понять, как реализовать эту строку с помощью приведенного ниже кода, чтобы он не отображал наличие атрибутов, измерений или веса.Если есть какой-либо из этих атрибутов, покажите дополнительную информацию.

Вот строка, которую я не могу получить в коде ниже: if ($product -> has_attributes() || $product -> has_dimensions() || $product -> has_weight()) {

add_action( 'woocommerce_after_single_product_summary', 'cac_remove_product_tabs', 2 );
function cac_remove_product_tabs(){
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
    add_action( 'woocommerce_after_single_product_summary', 'cac_display_as_one_product_page', 10 );
}
function cac_display_as_one_product_page() {
    wc_get_template( 'single-product/tabs/description.php' );
    //wc_get_template('single-product/tabs/additional-information.php');
    comments_template();
}

Любые идеи о том, как сделатьэта работа?Спасибо за любые идеи или советы по улучшению.

1 Ответ

0 голосов
/ 03 декабря 2018

Нет необходимости в том, что объяснено ниже…

Шаблон single-product/tabs/additional-information.php загружает вес продукта, размеры и атрибуты продукта, используя шаблонную функцию wc_display_product_attributes(), которая подключаетсяв woocommerce_product_additional_information action hook.

function wc_display_product_attributes( $product ) {
    wc_get_template( 'single-product/product-attributes.php', array(
        'product'            => $product,
        'attributes'         => array_filter( $product->get_attributes(), 'wc_attributes_array_filter_visible' ),
        'display_dimensions' => apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ),
    ) );
}

Таким образом, как вы можете видеть, каждый из них сначала фильтруется перед отображением в шаблоне single-product/product-attributes.php где вес продукта, размеры и продуктАтрибуты проверяются через некоторые условия, чтобы избежать пустых значений:

Для веса у вас есть (в строке 26) :

<?php if ( $display_dimensions && $product->has_weight() ) : ?>

Для измерений у вас есть (в строке 33) :

<?php if ( $display_dimensions && $product->has_dimensions() ) : ?>

Для атрибутов продукта: Если атрибуты продукта отсутствуют, будет выдан пустой массив, и ничего не будет отображаться.

Так что вам не нужно использовать:

 if ($product -> has_attributes() || $product -> has_dimensions() || $product -> has_weight()) { }

Добавление

Для заголовка, если нет данных для отображения, выпотребуется использовать:

add_filter( 'woocommerce_product_additional_information_heading', 'custom_product_additional_information_heading' );
function custom_product_additional_information_heading( $heading ) {
    global $product;

    $attributes = array_filter( $product->get_attributes(), 'wc_attributes_array_filter_visible' );

    return $product->has_weight() && $product->has_dimensions() && sizeof($attributes) > 0 ? $heading : false;
}

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

...