WordPress WooCommerce как использовать атрибут обратного вызова и получить спецификацию продукта - PullRequest
0 голосов
/ 22 марта 2020

У меня есть сайт WordPress с установленным WooCommerce. Есть несколько глобальных атрибутов со спецификацией продукта. Я хочу вызвать их как текст в длинном описании, используя шорткод.

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

/**
* Attribute shortcode callback.
*/
function testfunction( $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.
        // heads up that in WC2.7 $product->id needs to be $product->get_id()

        //echo strip_tags( get_the_term_list( $product->id, $taxonomy, $attribute_label . ' ' , ', ', '' ));  




        if ($attribute = Test){
            echo $product->get_attribute('Test');
        }


        elseif ($attribute = Test1){
            return $product->get_attribute('Test1');

        }


    }

}

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

Ссылка 1: Woocommerce - отображать один или несколько атрибутов продукта с короткими кодами в Интерфейс

[Ссылка 1], который я упомянул выше, позволяет мне выбирать несколько атрибутов с несколькими метками атрибута, как я хочу, но при этом проблема только в состоит в том, что он также включает имя атрибута, которое У меня не может быть.

Короче говоря, я хотел бы получить «несколько меток атрибута» , но без включения самого атрибута в текст обратного вызова . Любая подсказка?

1 Ответ

0 голосов
/ 22 марта 2020

Спасибо Кэти @helgatheviking за действительно быстрое решение. Вот что я искал: надеюсь, это поможет другим членам сообщества искать что-то похожее.

/**
 * Attributes shortcode callback.
 */
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 ) ){
                // Build the html string with the label followed by a clickable list of terms.
                //$html .= get_the_term_list( $product->get_id(), $taxonomy, '<li class="bullet-arrow">': ' , ', ', '</li>' );   
                $html .= get_the_term_list( $product->get_id(), $taxonomy, '', ', ', '' );
            }
        }
        // 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 = '' . $html . '';
        }
    }
    return $html;
}
add_shortcode( 'display_attributes', 'so_39394127_attributes_shortcode' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...