2010-10-20 3 views
2

Я пытаюсь отфильтровать свои сообщения, чтобы показывать только те, у которых есть настраиваемое значение для поля «Модель» при сортировке сообщений другим пользовательским полем «Цена».Фильтровать query_posts двумя настраиваемыми полями?

Вот функция, я использую (не работает):

<?php 
global $query_string; 
query_posts($query_string . "&meta_value=Model&orderby=meta_value&meta_key=Price&order=ASC"); 
?> 

Эта функция показывает только модели, но не сортировать сообщения по цене. Если я добавлю &meta_value=Model после order=ASC, он сортирует по цене, но показывает все посты, а не только модели.

+0

Я думаю, вам нужно показать fu но не только вызов. В противном случае я не вижу возможности помочь вам. –

ответ

1

Вы попробовали массив?

$args = array(
    'meta_value' => array('Model','Price') 
    ); 
    query_posts($args); 
+0

Это не дает результатов. – nurain

+0

это был всего лишь пример того, как настроить массив, поставить другие параметры. –

0

Я знаю, что это старый вопрос, но мне сегодня был нужен ответ, и я не мог найти его нигде. Я нашел этот вопрос, а затем создал ответ (как показано ниже):

<?php 
$sql = " 
    SELECT ID, meta1.meta_value, meta2.meta_value from $wpdb->posts p 
     JOIN $wpdb->postmeta meta1 ON meta1.post_id = p.ID 
     JOIN $wpdb->postmeta meta2 ON meta2.post_id = p.ID 
    WHERE p.post_status = 'publish' 
    AND p.post_type = 'post' 
    AND meta1.meta_key = 'Model' 
    AND meta2.meta_key = 'Price' 
    ORDER BY meta2.meta_value DESC 
"; 
$posts_with_meta = $wpdb->get_col($sql); 
$my_query = new WP_Query(); 
foreach ($posts_with_meta as $p) { 
    $post = get_post(intval($p)); 
    setup_postdata($post); 
    print_r($post); 
} 
?> 
7

вы смотрели на http://codex.wordpress.org/Class_Reference/WP_Query

В частности в этом разделе:

Multiple Handling Настраиваемое поле:

Показать сообщения несколько настраиваемых полей:

$args = array(
    'post_type' => 'product', 
    'meta_query' => array(
     array(
      'key' => 'color', 
      'value' => 'blue', 
      'compare' => 'NOT LIKE' 
     ), 
     array(
      'key' => 'price', 
      'value' => array(20, 100), 
      'type' => 'numeric', 
      'compare' => 'BETWEEN' 
     ) 
    ) 
); 
$query = new WP_Query($args); 
Смежные вопросы