Как вывести атрибуты товара WooCommerce с помощью шорткода

Нашел на просторах Stack overflow, оставлю здесь чтобы долго потом не искать.

Чтобы вывести в любом месте страницы WooCommerce атрибут товара с помощью шорткода, нужно добавить в functions.php следующий код:

PHP
function display_attribute_terms_shortcode( $atts ) {
    $args = shortcode_atts( array(
        'attribute' => '',
    ), $atts );
    if ( empty( $args['attribute'] ) ) {
        return '';
    }
    $taxonomy = strpos( $args['attribute'], 'pa_' ) === false ? wc_attribute_taxonomy_name( $args['attribute'] ) : $args['attribute'];
    if ( ! taxonomy_exists( $taxonomy ) ) {
        return '';
    }
    $terms = get_terms( array(
        'taxonomy'   => $taxonomy,
        'hide_empty' => false,
    ) );
    if ( is_wp_error( $terms ) || empty( $terms ) ) {
        return '';
    }
    $html = '<ul class="attribute-terms-list">';
    foreach ( $terms as $term ) {
        $html .= sprintf(
            '<li><a href="%s">%s</a></li>',
            esc_url( get_term_link( $term, $taxonomy ) ),
            esc_html( $term->name )
        );
    }
    $html .= '</ul>';
    return $html;
}add_shortcode( 'display_attribute_terms', 'display_attribute_terms_shortcode' );

Вместо <ul> и <li> можно использовать любые конструкции, например <div>.

На странице надо разместить шорткод [display_attributes attributes="*ярлык атрибута*"]. В месте размещения этого шорткода появится название атрибута и его значения через запятую.

Чтобы вывести значения одного конкретного атрибута, надо разместить в functions.php следующий код:

PHP
/**
 * Attribute shortcode callback. 
 */
function so_39394127_singular_attribute_shortcode( $atts ) {

    global $product;

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

    // parse the shortcode attributes
    $args = shortcode_atts( array(
        'attribute' => ''
    ), $atts );

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

    if( $args['attribute'] ){

        // get the WC-standard attribute taxonomy name
        $taxonomy = strpos( $args['attribute'], 'pa_' ) === false ? wc_attribute_taxonomy_name( $args['attribute'] ) : $args['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, ' ' , ', ', '' );   
        }

    }

    return $html;
}
add_shortcode( 'display_attribute', 'so_39394127_singular_attribute_shortcode' );

На странице размещаем шорткод [display_attribute attribute="*ярлык атрибута*"]. В месте размещения появится только значение атрибута (если их несколько — они будут через запятую).

Как вам статья?
+1
0
+1
1
+1
0
+1
0
+1
0
+1
0

Рекомендую почитать