//Displaying latest post per author on front page
function filter_where($where = '') {
global $wpdb;
$where .= " AND vipwp_posts.id = (select id from {$wpdb->prefix}posts p2 where p2.post_status = 'publish' and p2.post_author = {$wpdb->prefix}posts.post_author order by p2.post_date desc limit 0,1)";
return $where;
}
add_filter('posts_where', 'filter_where');
上記のコードを変更したいのですが、レコードの順序をdateからmeta_valueで変更することは可能ですか?
例:CHANGE
order by p2.post_date
に
meta_key='name_key' ORDER BY meta_value
ありがとう、でもpost_whereを削除しても投稿者ごとに最新の投稿が表示されない
WordPress Codexを見てください。 http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_orderby
function edit_posts_orderby($orderby_statement) {
$orderby_statement = "meta_value DESC";
return $orderby_statement;
} add_filter('posts_orderby', 'edit_posts_orderby');
WP_Queryを自分で作成する場合は、orderby
パラメータをmeta_value
に変更できます
ここで見てみましょう: http://codex.wordpress.org/Class_Reference/WP_Query
pre_get_posts
アクションから完全にできると思います。それであなたのposts_where
フィルタを削除して、それを置き換えてみてください:
function wpa_69199( $query ) {
set_query_var( 'orderby', 'meta_value' );
set_query_var( 'meta_key', 'name_key' ); //field you'd like to order by
}
add_action( 'pre_get_posts', 'wpa_69199' );
注:ここには条件付きロジックはなく、すべての投稿がこのようにソートされます。