web-dev-qa-db-ja.com

WP_Queryを使用してカスタムのメタ値を取得し、jsonオブジェクトに到達する

だから私はこのクライアントが販売している製品に関連したワードプレスサイトの各投稿に対して4つのカスタムメタボックスを持っています。

私は3つのドロップダウンボックスを持っています。1つはカテゴリ用で、もう2つはカスタムメタボックス用です。私が扱っているメタボックスはadhesion_boxsubstrate_boxです。

投稿のタイトルをクエリするときに私のAJAXスクリプトはうまく機能しますが、メタ値を取得しようとすると機能しません。 WP_Queryの代わりに$wpdbを使用しようとしています。これは動作していないPHPのビットです:

$cat   = $post['cat'];
$query = new WP_Query( array( 'cat' => '$cat' ) );

if($query->have_posts()){
    $posts = $query->get_posts();
    foreach( $posts as $post ) {
        $return[$post->id] = $post->meta_value;
    }
}

今それが返すJSONオブジェクトは:

OBJECT: {"":""}

だから私は少し迷った。これは私の友人がカテゴリ別に投稿タイトルをつかむために書いた長い$ wpdbクエリです - それはうまく働きます、しかし私は投稿タイトルではなくadhesion_boxメタ値が必要です。

$query = $wpdb->get_results(
    "SELECT p.`id`,p.`post_title`
    FROM $wpdb->posts `p`
    JOIN $wpdb->term_relationships `tr` ON (`p`.`ID` = `tr`.`object_id`)
    JOIN $wpdb->term_taxonomy `tt` ON (`tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`)
    JOIN $wpdb->terms `t` ON (`tt`.`term_id` = `t`.`term_id`)
    WHERE `p`.`post_type`='post'
    AND `p`.`post_status` = 'publish'
    AND `tt`.`taxonomy` = 'category'
    AND `t`.`term_id` = '$cat'");

私はその価値をつかみ、そして最も簡単な方法でそれをする方法を考え出すのに苦労しています。

任意の助けをいただければ幸いです。

これがデモなので、ご覧になれます

1
Remy Sheppard

これを行う最良の方法は$wpdbを使うことです。カテゴリ別にmeta_valueを引き出すためのクエリは次のとおりです。

$query = $wpdb->get_results(
    "SELECT p.`ID`, pm.`meta_value` FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
    LEFT JOIN {$wpdb->term_relationships} `tr` ON `p`.`ID` = `tr`.`object_id`
    LEFT JOIN {$wpdb->term_taxonomy} `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
    WHERE `pm`.`meta_key` = 'adhesion_box'
    AND `p`.`post_status` = 'publish'
    AND `p`.`post_type` = 'post'
    AND `tt`.`taxonomy` = 'category'
    AND `tt`.`term_id` = $cat
");
0
Remy Sheppard