web-dev-qa-db-ja.com

メタデータの日付順に投稿(サイト全体)

私のカスタム「ホーム」ページは、カスタム日付フィールドを介して私のカスタム投稿をfunctions.phpの(カスタム名になるように更新された)コードでソートするように設定されています。

// sort order for home page
add_action('wp', 'wwgo_check_page');
function wwgo_check_page () {
if (is_page()) {
    add_filter('get_previous_post_sort', 'sort_it');
    add_filter('get_next_post_sort', 'sort_it');
    add_filter('posts_orderby', 'sort_it' );
    add_filter('posts_join', 'join_it' );
    add_filter('posts_where', 'where_it' );

    function sort_it () {
        global $wpdb;

        return " $wpdb->postmeta.meta_value ASC ";
    }

    function join_it( $join ) {
        global $wpdb;

        $join .= " LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id) ";

      return $join;
    }

    function where_it( $where ) {
        global $wpdb;
        $where .= "AND $wpdb->postmeta.meta_key = 'deadline' ";

      return $where;
    }
}



}

これはダンディでシンプルです。今すぐ私はこれがサイト全体で機能するようにしたいです。アーカイブページ、カテゴリなどの投稿をカスタム日付フィールドで最初に並べ替えるようにします。

何か案は?

'if'をis_archive()に変更してみましたが、効果はありませんでした。私も<! is_single()>を試しました。

きっとそれは単純なものになるはずです。しかし、私はphpに慣れていないので無知です

これは サイト です。ここでホームページはうまくソートされていますが、 'poetry'をクリックした場合(投稿数の少ない唯一のページ)ソートはうまくいきません。

どんな提案でも多くの喜びで満たされるでしょう。

どうもありがとうございました。

8
josh

orderbyがクエリ文字列に含まれていない場合は、query_varsまたは request フィルタを使用してorderbyを追加します。

2

私はあなたの 他の質問 も見ています。

日付のメタ値でソートしたい場合、それらは当然同じ形式でなければなりません - あなたのコードで指定したのと同じPHPの日付( 'm-y')形式ですか?

その場合、そのコードのmeta_valuemeta_value_numに変更すれば、より良い結果が得られるでしょうか。

これがうまくいくかどうかわからないが、試してみる価値があるかもしれません。

0
djb

なぜquery_posts()を使わないのですか?

<?php
query_posts('meta_key=key_name&orderby=key_name&sort=ASC');
if ( have_posts() ) : while ( have_posts() ) : the_post();

endwhile; else:

endif;

wp_reset_query();

また、pre_get_postsフックを使ってクエリを変更したり、is_archive()やis_page()などで条件付きソートを行うこともできます。

0
Brian Fegter