3

こんにちは、これは WP_Query の引数です。

$args = array('post_type' => 'job_listing');
$args['meta_query']=array(
   'relation' => 'OR',
    array(
        'key' => 'app_trailer-type',
        'value' => $job_tailor,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'app_pay-type',
        'value' => $app_pay_type,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_address',
        'value' => $geo_address,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_country',
        'value' => $geo_country,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_short_address',
        'value' => $geo_short_address,
        'compare' => 'LIKE'
    ),
);

これはリターンクエリのようなものです。

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id)
INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id) WHERE 1=1  AND wp_posts.post_type = 'job_listing' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'expired' OR wp_posts.post_status = 'tr_pending' OR wp_posts.post_status = 'tr_failed' OR wp_posts.post_status = 'tr_completed' OR wp_posts.post_status = 'tr_activated' OR wp_posts.post_status = 'private') AND ( (wp_postmeta.meta_key = 'app_trailer-type' AND CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Flatbed%')
AND  (mt1.meta_key = 'app_pay-type' AND CAST(mt1.meta_value AS CHAR) LIKE '%Per Week%')
AND  (mt2.meta_key = 'geo_address' AND CAST(mt2.meta_value AS CHAR) LIKE '%Davenport%')
AND  (mt3.meta_key = 'geo_country' AND CAST(mt3.meta_value AS CHAR) LIKE '%United States%')
AND  (mt4.meta_key = 'geo_short_address' AND CAST(mt4.meta_value AS CHAR) LIKE '%Davenport%') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

私はそのクエリが好きなクエリを必要としました。

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id)
INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id) WHERE 1=1  AND wp_posts.post_type = 'job_listing' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'expired' OR wp_posts.post_status = 'tr_pending' OR wp_posts.post_status = 'tr_failed' OR wp_posts.post_status = 'tr_completed' OR wp_posts.post_status = 'tr_activated' OR wp_posts.post_status = 'private') AND ( (wp_postmeta.meta_key = 'app_trailer-type' OR CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Flatbed%')
OR  (mt1.meta_key = 'app_pay-type' AND CAST(mt1.meta_value AS CHAR) LIKE '%Per Week%')
OR  (mt2.meta_key = 'geo_address' AND CAST(mt2.meta_value AS CHAR) LIKE '%Davenport%')
OR  (mt3.meta_key = 'geo_country' AND CAST(mt3.meta_value AS CHAR) LIKE '%United States%')
OR  (mt4.meta_key = 'geo_short_address' AND CAST(mt4.meta_value AS CHAR) LIKE '%Davenport%') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

助けてください。

4

4 に答える 4

7

OR クエリの場合、引数配列は次のようになります。

$args = array(
    'post_type' => 'post',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'app_trailer-type',
            'value' => $job_tailor,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'app_pay-type',
            'value' => $app_pay_type,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_address',
            'value' => $geo_address,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_country',
            'value' => $geo_country,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_short_address',
            'value' => $geo_short_address,
            'compare' => 'LIKE'
        ),
    )
);

参照: http://codex.wordpress.org/Class_Reference/WP_Query

于 2013-10-28T09:09:44.777 に答える
4

likeで引数を変更しました。

$args = array('post_type' => 'job_listing', 'relation' => 'OR');
$args['meta_query']=array(
    array(
        'key' => 'app_trailer-type',
        'value' => $job_tailor,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'app_pay-type',
        'value' => $app_pay_type,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_address',
        'value' => $geo_address,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_country',
        'value' => $geo_country,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_short_address',
        'value' => $geo_short_address,
        'compare' => 'LIKE'
    ),
);
于 2013-10-28T09:29:17.563 に答える