web-dev-qa-db-ja.com

Post_metaと(作成者)user_metaによるカスタムWP_Queryの順序

私はGoogleや他の場所で見つけることができなかったという問題を抱えています。文脈に問題を置くために。私はユーザーがチュートリアルをするために彼らの家庭教師リストを置くことができるワードプレスサイトを作っています、そして私は彼らが自己と彼らの聞いている家庭教師の評価のシステムを実行しています。だから私はtutor_listingポストタイプを持ち、それぞれのtutor_listingは 'post_score'メタ値を持ち、そして各チューター(ユーザー彼のチュートリアルを置きます)user_meta'user_points'という値があります。

だから私は WP_Query すべての公開されたtutor_listingをデータベースから取得する でソートする必要があります post_score + user_points) 'post_score'を強調するために、post_typetutor_listingpost_metaであり、 'user_points'はその投稿の著者のuser_metaです(tutor_listing)。また、ループに表示するにはその値が必要です。

私はすべてのtutor_listingを得ることができます

$args = array(
    'post_type' => 'job_listing',
    'post_status' => 'publish'
);
$query = new WP_Query( $args );

私はこのようなカスタムのワードプレスSQLクエリから結果を得ることができます:

SELECT p1.ID, p1.post_author, p1.post_title, p1.post_date, (um1.meta_value + pm1.meta_value) AS total_score
FROM $wpdb->posts p1
    JOIN $wpdb->users u1 ON (p1.post_author = u1.ID)
    JOIN $wpdb->usermeta um1 ON (um1.user_id = u1.ID)
    JOIN $wpdb->postmeta pm1 ON (pm1.post_id = p1.ID)
WHERE p1.post_type = 'tutor_listing'
AND p1.post_status = 'publish'
AND um1.meta_key = 'user_points'
AND pm1.meta_key = 'post_score'";

WP_Queryはそのような機能を提供できますか?改ページなどのすべての追加機能を使用するには、WP_Queryが必要です。それとも私は私のカスタムSQLで行われたすべての結果がWP_Queryオブジェクトに与えることができる方法はありますか?

ありがとうございました

5

WordPress 4.0では、複数のorderbyパラメータを指定し、それぞれの順序を個別に設定することができました。

どうやってするの?複数の参照をするだけで、これを実行する1つの方法があります。

$args = array(
    'orderby' = > array(
        'title' => 'ASC',
        'date' => 'DESC',
    )
);

詳細はこちら...

しかし、WordPress 4.2以降でのみ、これをメタ値で行うことができます。 この記事を見てください。

1
Fleuv

あなたはwpdbを使うことができて、それでもページネーション機能を手に入れることができます。これがこのトピックに関する良い答えです。

WordPress Paginate $ wpdb-> get_results

0
RiotAct