サポート » 使い方全般 » カスタムフィールドの値で公開日の並びにしたい

  • Wordpressでのサイトにて一覧ページのソート機能を作成しています。
    どうしても反映できない部分があり質問させていただきました。

    やりたい事
    実現したい事は「開催が終了しました」となっている記事は後ろに回し、なおかつソート順は公開日を基準に順番にソートしたいです。

    現在カスタムフィールドにて「test_end」を作成し、そこに「2022 01 01」のように日付を入力すれば、添付している画像1のように、
    入力している日付が過ぎれば「開催は終了しました」とマスクがかかるよう設定しています。

    しかし、ソートは投稿日順に表示をしているので画像1の赤いサムネイル部分のように、開催は終わっていますが投稿日が最近なので一覧の上位に来てしまっています。
    今までは手動で公開日を修正して、開催が終っていたのものは一覧の後ろに回していましたが、自動で後ろに回るよう設定をしたいと思っています。

    添付させていただいたコードでカスタムフィールドを指定すると画像2のように開催が終了したものは自動的に後ろにソートされるのですが、画像2の公開日時の通り
    “test_end”にてソートがかかっているので公開日が入れ違いになってしまっています。

    カスタムフィールドの値を取得して終了したものは一覧の後ろに回しつつ、一覧ページは投稿日が若い順に表示することは可能でしょうか。`

    画像1
    https://d.kuku.lu/46e2ff199
    画像2
    https://d.kuku.lu/ee1e8ae24

    <strong>該当コード</strong>

    function change_posts_per_page($query) {
     
        if( is_admin() || ! $query->is_main_query() ){
            return;
        }
    
        if ( $query->is_post_type_archive( 'news' ) 
            ||
             $query->is_tax() )
            {
                $query -> set('posts_per_page', '20' ); 
                $query -> set('meta_key', 'test_end'); 
                $query -> set('orderby', array('meta_value' => 'DESK','date' => 'DESK') );
            return;
            }
    }
    add_action( 'pre_get_posts', 'change_posts_per_page' ); 

    下記の内容も試してみましたが、やはり想定の挙動にはなりませんでした。

    $query -> set('orderby', array('meta_value' => 'ASC','date' => 'ASC') );
    
    $query-> set('orderby', 'meta_value date');
    
    $query-> set('order', 'DESC');

    お詳しい方、アドバイスをいただけないでしょうか。
    よろしくお願いいたします。

    • このトピックはsakamoto93が1年、 5ヶ月前に変更しました。
    • このトピックはsakamoto93が1年、 5ヶ月前に変更しました。
1件の返信を表示中 - 1 - 1件目 (全1件中)
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「カスタムフィールドの値で公開日の並びにしたい」には新たに返信することはできません。