Показать пользовательские и стандартные атрибуты продуктов на отдельной странице продукта WooCommerce

Я искал это повсюду и нашел отличный код для отображения стандартных атрибутов продукта, но пользовательские (которые не начинаются с pa_) не отображаются.

Прежде всего, настройка: я создал единый шаблон продукта с Elementor, и обычно я могу просто добавить дополнительную информацию о модуле, и все готово. Я делал это раньше. :)

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

Итак, после долгих поисков в Интернете я нашел фрагмент , сделанный helgatheviking. чтобы создать шорткод для вызова всех атрибутов продукта:

/**
 * Attributes shortcode callback on productpage.
 */
function so_39394127_attributes_shortcode( $atts ) {

    global $product;

    if( ! is_object( $product ) || ! $product->has_attributes() ){
        return;
    }

    // parse the shortcode attributes
    $args = shortcode_atts( array(
        'attributes' => array_keys( $product->get_attributes() ), // by default show all attributes
    ), $atts );

    // is pass an attributes param, turn into array
    if( is_string( $args['attributes'] ) ){
        $args['attributes'] = array_map( 'trim', explode( '|' , $args['attributes'] ) );
    }

    // start with a null string because shortcodes need to return not echo a value
    $html = '';

    if( ! empty( $args['attributes'] ) ){

        foreach ( $args['attributes'] as $attribute ) {

            // get the WC-standard attribute taxonomy name
            $taxonomy = strpos( $attribute, 'pa_' ) === false ? wc_attribute_taxonomy_name( $attribute ) : $attribute;

            if( taxonomy_is_product_attribute( $taxonomy ) ){

                // Get the attribute label.
                $attribute_label = wc_attribute_label( $taxonomy );

                // Build the html string with the label followed by a clickable list of terms.
                // Updated for WC3.0 to use getters instead of directly accessing property.
                $html .= get_the_term_list( $product->get_id(), $taxonomy, '<li class="prod-attr">' . $attribute_label . ': ' , ', ', '</li>' );
            }

        }

        // if we have anything to display, wrap it in a <ul> for proper markup
        // OR: delete these lines if you only wish to return the <li> elements
        if( $html ){
            $html = '<ul class="product-attributes">' . $html . '</ul>';
        }

    }

    return $html;
}
add_shortcode( 'display_attributes', 'so_39394127_attributes_shortcode' );

После добавления шорткода [display_attributes] в аккордеон я получаю все показанные стандартные атрибуты WC, которые были созданы стандартным способом: товары -> атрибуты -> создать новые. Так что это здорово!

Но не пользовательские атрибуты, которые вы создаете внутри самой страницы продукта -> Данные о продукте -> пользовательский атрибут продукта -> добавить (скриншот того, что я имею в виду: https://gyazo.com/f2619c7f11d295f4897b38f08d76453b)

Пользовательские атрибуты страницы продукта на снимке экрана не отображаются спереди: https://gyazo.com/4c126f7082c6a856d1cf30b712daa37f

Я думаю, это связано с тем, что эти пользовательские атрибуты продукта не содержат часть pa_ перед метазначением, как, например, pa_type-speaker (самостоятельно созданный стандартный атрибут).

Как я могу также отображать настраиваемые атрибуты? Я попытался удалить pa_ из приведенного выше кода, но это не работает, и я не могу найти, что делать дальше. Можете ли вы, ребята, помочь мне здесь? спасибо!


person Mukie    schedule 30.04.2020    source источник


Ответы (1)


Elementor помог мне в этом!

Решение:

Откройте страницу одного шаблона продукта, добавьте дополнительный информационный модуль в строку. Создайте глобальный виджет этого объекта. Добавьте шорткод этого глобального виджета в модуль с вкладками, и все готово. :)

person Mukie    schedule 06.05.2020