Php Woocommerce产品短代码按ID顺序订购

Php Woocommerce产品短代码按ID顺序订购,php,wordpress,woocommerce,shortcode,Php,Wordpress,Woocommerce,Shortcode,我想按[products ids=”“]短代码中输入的ID订购产品显示。我需要按您输入的顺序进行排序。所以[产品ID=“1,2,3”][产品ID=“3,1,2”][产品ID=“2,3,1”]。。。所有的列表都不同 我发现了这段代码,我认为很接近,但不太有效。我对这种方法不太熟悉,所以我不确定哪里不对 add_filter( 'woocommerce_shortcode_products_query', 'woocommerce_shortcode_products_orderby' ); fun

我想按[products ids=”“]短代码中输入的ID订购产品显示。我需要按您输入的顺序进行排序。所以[产品ID=“1,2,3”][产品ID=“3,1,2”][产品ID=“2,3,1”]。。。所有的列表都不同

我发现了这段代码,我认为很接近,但不太有效。我对这种方法不太熟悉,所以我不确定哪里不对

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;
我读了一篇文章,但不确定它是如何得到我输入的ID列表的。是否有其他/更好的方法获取id列表并将其用于订单


关于如何让这件事运作有什么想法吗?

只需在你的短代码中添加orderby,如-

[products ids="1,2,3" orderby="post__in"]
[products ids="3,1,2" orderby="post__in"]
[products ids="2,3,1" orderby="post__in"]

只需在您的短代码中添加order by,如-

[products ids="1,2,3" orderby="post__in"]
[products ids="3,1,2" orderby="post__in"]
[products ids="2,3,1" orderby="post__in"]
从2020年开始更新

产品快捷码无法处理此orderby

因此,您可以创建自己的foreach循环:

foreach ($products_to_show_array as $_product_id) {
    setup_postdata( $GLOBALS['post'] );

    // Render product template.
    wc_get_template_part( 'content', 'product' );
}
wp_reset_postdata();
从2020年开始更新

产品快捷码无法处理此orderby

因此,您可以创建自己的foreach循环:

foreach ($products_to_show_array as $_product_id) {
    setup_postdata( $GLOBALS['post'] );

    // Render product template.
    wc_get_template_part( 'content', 'product' );
}
wp_reset_postdata();

我试过了,但没用。它似乎忽视了他们。它应该是这样工作的,但不是出于某种原因。我试过这个,但它没有工作。它似乎忽视了他们。它应该是这样工作的,但不是出于某种原因。