1

私は、私たちの顧客のために行っているプロジェクトで、WordPress クエリに問題があります。基本的に私の問題は、指定された meta_keys を使用してデータベースから投稿を取得したいということです。メタ キー「_price」と xx と yy の間の値を持つ投稿 (wpcompare) を取得したいと考えています。これまでのところ正常に動作します。ここで、メーカー、カテゴリ、およびタグのフィルターを追加したいと考えています。これらのフィルタ値はすべて複数であるため、複数のメーカーを選択できます。たとえばキャノンとニコン。したがって、WP_MetaQuery を使用すると、複数の meta_keys と値をフィルター処理できますが、クエリを AND または OR と組み合わせることはできません。

私のクエリがどのように機能するか、例を挙げましょう。

「meta_value _price が 100 ~ 200 ドルで、メーカー (_hersteller) が Canon OR Nikon OR Sony である、post_type "wpcompare" のすべての投稿を教えてください」.

頭がおかしくなったので助けてください。

事前にどうもありがとうございました :-)

ここに私のコードがあります:

if(isset($_POST) AND !empty($_POST))
{
    $meta_query = array(
        'relation' => 'AND',
        array(
            'key' => '_price',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    );
}
else
{
    $meta_query = '';
}

$args = array(
    'post_type' => 'wpcompare',
    'post_status' => 'publish',   
    'paged' => $paged,
    'meta_query' => $meta_query,
    'posts_per_page' => ($per_page == false) ? 18 : $per_page,
    'ignore_sticky_posts'=> true
);

$temp = $wp_query;

$wp_query = null;
$wp_query = new WP_Query($args)
4

2 に答える 2

2
$args = array(
    'post_type' => 'posttypehere',
    'meta_query' => array(
       'relation' => 'OR',
        array(
              'key' => '_price',
              'value' => array($_POST['p_from'], $_POST['p_to']),
              'type' => 'CHAR',
              'compare' => 'BETWEEN'
              ), 
         array(
            'key' => 'somekey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
             ),
         array(
            'key' => 'anotherkey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    )
);

$query = new WP_Query( $args );
if ( $query->have_posts() ) :
    while ($query->have_posts()) : $query->the_post();
             echo $post_id = get_the_ID();
    endwhile;
endif;
于 2014-02-19T12:16:09.230 に答える
1
$meta_query = array(
        'relation' => 'OR',
        array(
            'key' => '_price',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ), 
        array(
            'key' => 'somekey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),
         array(
            'key' => 'anotherkey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    );
于 2013-11-12T10:01:55.457 に答える