Ordering posts by an array

时间:2017-07-21 作者:Chris Pink

我有一个查询,它返回许多不同的自定义帖子类型。我想按帖子类型数组的内容对帖子数组进行排序;e、 g。array(\'post\', \'video\', \'testimonial\'..... );

数组(顺序)是固定的。

如何在不对每种职位类型进行不同查询的情况下管理此问题?

3 个回复
SO网友:Rarst

对于本机API,这是不可能的,您可能会在为其破解SQL时遇到相当大的困难。

在用PHP代码检索后,像这样对帖子重新排序,这将是非常微不足道的。如果您使用get_posts() 您已经得到了您所操纵的数组WP_Query 结果的对象数组可公开使用$posts 所有物

注意,这假设您不需要对该查询分页。在这种情况下,事情很快就会变得一团糟,回到自定义SQL的山上。

SO网友:mrben522

你可以使用foreach 循环以按此顺序显示内容。循环遍历数组中的值,在每个循环中foreach 语句,循环浏览帖子并检查帖子类型是否等于当前所在数组中的值。

$query = //whatever your query is;
$array = //your array

foreach ($array as $value) {
    foreach ($query as $post) {
        if ($post->post_type == $value) {
            //code to show that thing
        }
    }
}

SO网友:Chris Pink

感谢mrben522为我们指明了方向;

<?
  $args = array(
    \'post_type\' => \'any\',
    \'category__in\' => wp_get_post_categories($post->ID),
    \'posts_per_page\' => 7,
    \'post__not_in\' => array($post->ID) ,
  );

  $related = new WP_Query($args);
  if( $related->have_posts() ) : ?>

    <ul class="related-posts">

        <?
        $array = array (\'article\', \'post\', \'video\', \'webinar\', \'factsheet\',\'whitepaper\', \'casestudy\');

        foreach ($array as $value) {
            while( $related->have_posts() ) : $related->the_post() ;
                if ($post->post_type == $value) {
                    get_template_part(\'template-parts/content\', \'related\');
                }
            endwhile;
            rewind_posts();
        } 
        ?>

    </ul>

<? endif;
wp_reset_postdata(); ?>

结束