WooCommerce产品短码特定订单

时间:2016-04-06 作者:Kirill Ulitin

是否有方法按照shortcode参数中ID的顺序获取产品:

e、 g级[products ids="53,68,1"]

带3个产品的显示块,其中53个位于第一位,68个位于第二位。。。?

现在我得到了按sku、名称等排序的产品,这取决于按参数排序的订单,但我需要具体的订单。

3 个回复
SO网友:Sonali
     function woo_products( $atts ) {
         global $post;
         $product_Out = \'\';
                $atts = shortcode_atts(
         array(
           \'product_ids\' => \'\',// your product id goes here
         ), $atts, \'bartag\' );
         $pro_ids = explode(",", $atts[\'product_ids\']);
         foreach ($pro_ids as $key => $values) {
            $product_obj = $product = wc_get_product( $values );
            //call your html and data in $product out variable
            $product_Out .= \'<div class="product_name">\'.$values.\'</div>\';
         }
         return $product_Out;
     }
     add_shortcode( \'woo_products\', \'woo_products\' );
     //use this shortcode [woo_products product_ids="9,86"]
SO网友:B4rT

我知道,这是一篇比较老的帖子,但在这个主题的帮助下,我最近也遇到了同样的问题pre_get_posts with WooCommerce Shortcode Query 我终于找到了解决办法。只需将此筛选器添加到函数中:

add_filter( \'woocommerce_shortcode_products_query\', \'woocommerce_shortcode_products_orderby\' );
function woocommerce_shortcode_products_orderby( $args ) {
    $standard_array = array(\'menu_order\',\'title\',\'date\',\'rand\',\'id\');

    if( isset( $args[\'orderby\'] ) && !in_array( $args[\'orderby\'], $standard_array ) ) {
    $args[\'orderby\']  = \'post__in\'; 
    }

    return $args;
}

SO网友:indextwo

B4rT\'s answer 有正确的想法,但无需为其编写额外的过滤器。这个[products] 短代码基本上使用WP_Query, 所以如果你把订单设置为post__in, 它自然会按照传递的顺序排列帖子:

[products ids="53,68,1" orderby="post__in"]

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\