web-dev-qa-db-ja.com

投稿メタ値による注文クエリ

      //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を削除しても投稿者ごとに最新の投稿が表示されない

1
Marco

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

1
Michael

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

注:ここには条件付きロジックはなく、すべての投稿がこのようにソートされます。

1
helgatheviking