1

ページで複数の投稿タイプを注文しようとしていますが、以下のソリューションは機能していますが、投稿がタイプごとに正確に表示されません

                <?php $args = array_merge( $wp_query->query,
                array( 'post_type' =>array( 'editorial','video','portfolio' ),'posts_per_page=-1','orderby'=>'post_type') );
                }
                query_posts( $args );

                $postType='';

                 if (have_posts()) : while (have_posts()) : the_post();
                 $PT = get_post_type( $post->ID );
                if($postType != $PT){
                 $postType =  $PT;
                echo '<p class="clearfix"><h1>All posts of type : '.$postType.'</h1></p>';
                }   
                ?>  

      <?php
      if($postType == 'editorial'){ ?>
          <?php echo $postType; ?>
          <?php }elseif($postType == 'video'){ ?>
          <?php echo $postType; ?>
          <?php }elseif($postType == 'portfolio'){ 
          <?php echo $postType; ?>
          }
          ?>

次のように出力されます。

タイプのすべての投稿: エディトリアル

社説

社説

社説

タイプ : ビデオのすべての投稿

ビデオ

ビデオ

次のタイプのすべての投稿: 編集 //問題

社説

タイプ : ポートフォリオのすべての投稿

ポートフォリオ

ポートフォリオ

ポートフォリオ

ポートフォリオ

前もって感謝します

4

1 に答える 1

2

Codexによると、 はパラメーターpost_typeに許可されている値の 1 つではありませんorderby

問題を回避する 1 つの方法は、次のようにposts_orderbyfilterを使用することです。

function order_posts_by_type($original_orderby_statement) {
    global $wpdb;
    return $wpdb->posts .".post_type ASC";
}

add_filter('posts_orderby', 'order_posts_by_type');

$custom_query = new WP_Query( array(
    'post_type' =>array( 'editorial','video','portfolio' ),
    'posts_per_page' => '-1',
    'orderby'=>'post_type',
    'order' => 'ASC'
) );

remove_filter('posts_orderby', 'order_posts_by_type');

FWIW、他の議論と一致するように変更'posts_per_page=-1'することをお勧めします。'posts_per_page' => -1

于 2012-06-30T18:51:08.723 に答える