• tt044

    (@tt044)


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

    実現したいこと

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

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

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

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

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

    画像1
    https://d.kuku.lu/df78496c4
    画像2
    https://d.kuku.lu/25018925d

    下記試したコードになります。

    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');

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

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • nobita

    (@nobita)

    こんにちは、
    CSSのorderと組み合わせを考えてみてはどうでしょう。

    
    <ul class="test-flex">
    <li style="order:1">1 1</li>
    <li style="order:5">2 5</li>
    <li style="order:5">3 5</li>
    <li style="order:1">4 1</li>
    <li style="order:1">5 1</li>

    css

    .test-flex{
    display:flex;
    flex-direction:column;
    }
    `
    http://www.tenman.info/wp3/emulsion/files/2022/11/test-result.png

    • この返信は2年前にnobitaが編集しました。
    トピック投稿者 tt044

    (@tt044)

    こんにちは、
    教えていただきありがとうございます!

    つまり、ソートは通常通り投稿日順にソートし、イベントが開催されているものは”order1″、終了したものは”order5″等を付与して強制的に後ろに回すと言った形でしょうか。

    一度実装させていただきます!

    トピック投稿者 tt044

    (@tt044)

    こちら実装し、理想的な動きにできました。
    大変勉強になりました。
    ご教授いただきありがとうございました!

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