私のカスタム「ホーム」ページは、カスタム日付フィールドを介して私のカスタム投稿を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'をクリックした場合(投稿数の少ない唯一のページ)ソートはうまくいきません。
どんな提案でも多くの喜びで満たされるでしょう。
どうもありがとうございました。
orderby
がクエリ文字列に含まれていない場合は、query_vars
または request フィルタを使用してorderby
を追加します。
私はあなたの 他の質問 も見ています。
日付のメタ値でソートしたい場合、それらは当然同じ形式でなければなりません - あなたのコードで指定したのと同じPHPの日付( 'm-y')形式ですか?
その場合、そのコードのmeta_value
をmeta_value_num
に変更すれば、より良い結果が得られるでしょうか。
これがうまくいくかどうかわからないが、試してみる価値があるかもしれません。
なぜ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()などで条件付きソートを行うこともできます。