用参数动态调用短代码

时间:2017-04-24 11:39:45

标签: wordpress parameters woocommerce shortcode

我有这个功能:

function test_q($atts){
    $args = shortcode_atts(array(
        'post_type' => 'product',
                    'columns' => 4,
        'posts_per_page' => 12,
                    'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'product_cat',
                        'field'    => 'slug',
                        'terms'    => array( 'mugs' ),
                           ),
                   array(
                       'taxonomy' => 'product_tag',
                       'field'    => 'slug',
                       'terms'    => array( 'football' ),
                          ),
                    ),
             ), $atts);
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
                   woocommerce_product_loop_start();
        while ( $loop->have_posts() ) : $loop->the_post();
            wc_get_template_part( 'content', 'product' );
        endwhile;
                    woocommerce_product_loop_end();
    } else {
        echo __( 'No products found' );
    }
            woocommerce_reset_loop();
    wp_reset_postdata();
    return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';

} add_shortcode('testasd','test_q');

我想用短代码将动态参数传递给'mugs'和'football'。我按类别和标签过滤产品。这个函数工作正常,但我想通过短代码传递这两个参数,使其动态化。 我需要每次使用不同的“马克杯”和“足球”术语来调用此短代码。例如'T恤'和'篮球'。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以通过提取短代码并通过短代码中的$ atts传递值来轻松完成。

在你的论点之后,你可以像下面那样传递它,

if($args['tax_query']['taxonomy'] == 'product_cat'){
    $args['tax_query']['terms'] = $atts['terms_cat'];
}
if($args['tax_query']['taxonomy'] == 'product_tag'){
    $args['tax_query']['terms'] = $atts['terms_tag'];
}

然后在短代码中添加2个参数,

[testasd terms_cat='t-shirts' terms_tag='basketball']