web-dev-qa-db-ja.com

投稿を日付順(DESC)とタイトル順(ASC)で並べ替える

現在、私のウェブサイトの投稿はタイトルのアルファベット順に並べられています。

/* Order Posts Alphabetically */
function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {
    $query->set( 'orderby', 'title' );
    $query->set( 'order', 'ASC' );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

今、私は記事をタイトル順(昇順)だけでなく日付順(降順)でアルファベット順にソートしたいと思います。

この例のように:

  • AUDI A1 Ambition 1.4(2017/01/01に投稿)
  • AUDI A1 Ambition 1.4(01/01/16に投稿されました)
  • AUDI A1 Ambition 1.4(2015年1月1日投稿)
  • BMW 120iアクティブフレックス2.0(2017/01/01に投稿)
  • BMW 120i Active Flex 2.0(2016/01/01に掲載)
  • BMW 120i Active Flex 2.0(2015年1月1日投稿)
  • シトロエン...

orderbyパラメータを$query->set( 'orderby', 'date title' );に変更しても問題は解決しません。最新の投稿を最初に表示する必要があるからです。

私は他のアイデアをいただければ幸いです。

3
drabello

Codex で説明されている次の例のように、配列をqueryに渡すことができます。

$args = array(
'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
);

$query = new WP_Query( $args );

あなたの場合、このようなものになります:

/* Order Posts Alphabetically */
function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {

    $args =  array( 'post_date' => 'DESC', 'title' => 'ASC' );

    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

post_dateをプライマリフィルターとして使用する場合は、配列内の彼の位置を変更する必要があります。コードは、最新のpost_dateからアルファベット順にすべての投稿を照会します。