关于按 ID 排序的自定义 post 类型短代码的问题

Issue on custom post type shortcode ordering by ids

出于特殊目的,我必须创建一个自定义 post 类型,并通过在我的简码上指示每个自定义 post 的 ID 来像轮播一样显示它。

问题是当我使用它时,自定义短代码的最后一个 ID 没有显示在正确的位置,有时在前面,有时在最后但从来没有在正确的位置(例如我设置 3527 ID在第4位,它在最后一个位置显示这个产品。

我试图显示 id 的数组,似乎没有任何问题(数组修改等)id 在数组上的正确位置

这是代码:

//Carousel Shortcode Produits By ID
    function carousel_products_ids_shortcode( $atts ) {
        $c=extract(shortcode_atts( array(
            'ids'=>''
        ), $atts ));
        $args = array(
            'post_type' => 'pp_produit',
            'posts_per_page' => -1,
            'publish_status' => 'published',
            'order'=>'ASC'
        );
        if(!is_null($ids) && $ids!=""){
            $args['post__in']=explode(",",$ids);
            print_r($args['post__in']);
        }
        ob_start();
        $query = new WP_Query($args);
        
        if ( $query->have_posts() ) { ?>
        <div class="carousel-custom-products">
            <div class="owl-carousel owl-custom-products">
                <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                <div class="single-produit">
                    <div id="produit-<?php the_ID(); ?>" <?php post_class(); ?>>
                        <?php if(has_post_thumbnail()) {  ?>
                            <div class="img-container">
                                <a class="thumb-produit" href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
                            </div>
                        <?php }else{ ?>
                            <div class="img-container">
                                <a href="<?php the_permalink(); ?>" class="thumb-produit">
                                    <img src="<?php echo get_stylesheet_directory_uri()."/img/defaultpp.jpg" ?> ">
                                </a>
                            </div>    
                        <?php } ?>
                        <div class="produit-single-content">
                            <h3><a href="<?php the_permalink(); ?>" style="color:<?php the_field('couleur_du_titre_du_produit'); ?>" class="viga"><?php echo (strlen(get_the_title())>30)? substr(get_the_title(),0,30)."..." : substr(get_the_title(),0,30); ?></a></h3>
                            <?php the_excerpt(); ?>
                        </div>
                    </div>
                </div>
                <?php endwhile; ?>
            </div>
        </div>
        <?php $myvariable = ob_get_clean();
        return $myvariable;
        }   
    }
    add_shortcode( 'carouselproductsids', 'carousel_products_ids_shortcode' );

这是简码:

[carouselproductsids ids="3477,3479,3481,3527,3487,3483,3485,3489,3491,3496,3493"]

比如ID 3257在生成轮播图的最后一个位置!

wp_query 将根据您传递的“顺序”arg 从数据库中获取 posts 所以 它会检查是否post id 是否在数组中,但它不会保留数组的顺序 如果你想以特定顺序显示posts你可以将一些自定义字段(如元键或某些东西)传递给post s 以特定顺序获取它们 或者您可以运行 在post_id 数组上循环调用wp_query 每个id