質問: 【カスタム投稿タイプ】 ・タグにopenがある場合、優先して表示 ・openの記事から下はは時系列で表示 ・1ページに10件表示 ということをやりたいです。 時系列で記事一覧を表示しているので ・最初にopenタグがある場合はその記事を表示 ・それ以外はopenタグを省いた投稿で時系列で表示(ページング) としたいのですが、、、 伝わりますでしょうか>< 【1ページ目】 openタグあり投稿記事 openタグあり投稿記事 openタグあり投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 【2ページ目】 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事 openタグなし投稿記事
回答: タグでの記事並べ替えは確か出来なかったと思います。WP_Queryはカスタムフィールドなら並べ替えが出来るため、 ・カスタム投稿タイプにアーカイブが有る ・タグを使わない(もしくはもう一手間かける) という条件であれば出来るような気がします。 1. カスタムフィールドに「open」フラグを持つものを作る 2. `pre_get_posts` でカスタム投稿タイプの場合条件を追加する 'meta_key' と 'orderby' でカスタムフィールドでの並べ替えを行う。 3. (タグを使う場合)記事の保存にフックしてタグが付いた場合はカスタムフィールドに「open」フラグを入れる 当然タグが外れたタイミングでも同じくカスタムフィールドを操作。 ``` // 未テスト(こういう感じ、という例) function custom_query_pre_get_posts( $query ) { if ( is_admin() || !$query->is_main_query() ) { return $query; } // 管理画面は除外 if ( is_post_type_archive( 'custom_post_type_name' ) ) { // カスタム投稿タイプ名 'custom_post_type_name' $query->set( 'meta_key', 'custom_field_name' ); // カスタムフィールド名 'custom_field_name' $query->set( 'orderby', array( 'meta_value_num' => 'ASC', 'date' => 'DESC' ) ); // 並び順を指定 } return $query; } add_action( 'pre_get_posts', 'custom_query_pre_get_posts' ); /* 3. のコードは書いていません */ ``` 【WordPress ≫ 記事の絞り込みや並び替えを行う | MORILOG】 【カスタムフィールドで並び替え:WordPress私的マニュアル】 【WordPressのカスタムフィールドでソートする | com4tis】 【もっと簡単版!WordPress 投稿の並び順の条件(orderby)を複数にして、それぞれの並べ方(order)を別々に指定したい。 - かもメモ】 もしこの方法を採られる場合は、複合キーワードでの検索は案外難しいのでトライ&エラーが必須ですので、がんばってください。