2015-11-05 11 views
0

Хорошо, ребята, я нахожусь над моей головой.WP_Query пользовательский тип сообщения несколькими настраиваемыми полями

Я пытаюсь создать фильтр для персонализированного типа сообщений «Виллы». Эти виллы имеют несколько настраиваемых полей, эти настраиваемые поля существуют в группе с именем «функции».

Я создал форму поиска/фильтра, которые POST представляют данные, которые затем я могу захватить с помощью запроса $ _GET.

данные я отправляю включает:
- область, тип, стиль выберите поля;
- вид на море, бассейн, река проект checkboxes;
- Цена поля ввода

То, что я пытаюсь выполнить это получить запрос собирается, который фильтрует всю «Виллу», используя значения формы. После обширного поиска в Google я обнаружил, что можно запрограммировать пользовательские post_type с настраиваемыми полями, используя meta_key. Основном то, что я пытаюсь сделать, это:

$propertyPrice  = $_GET['price']; 
    $propertyRegion  = $_GET['region']; 
    $propertyType  = $_GET['type']; 
    $propertyStyle  = $_GET['style']; 
    $hasSeaview   = $_GET['seaview']; 
    $hasSeaAccess  = $_GET['sea-access']; 
    $hasSwimmingPool = $_GET['swimming-pool']; 
    $hasReformProject = $_GET['reform-project']; 

    if(isset($propertyPrice) || isset($propertyRegion || isset($propertyType)) || isset($propertyStyle) || isset($hasSeaview) || isset($hasSeaAccess) || isset($hasSwimmingPool) || isset($hasReformProject)) { 
     $args = array(
      'meta_query' => array(
       'relation' => 'OR' 
       array(
        'key' => 'property-price', 
        'value' => $propertyPrice, 
       ), 
       array(
        'key' => 'property-region', 
        'value' => $propertyRegion, 
       ), 
       array(
        'key' => 'property-type', 
        'value' => $propertyType, 
       ), 
       etc...... 
      ) 
     ); 
    } 

Однако, я не могу за жизнь мне понять, как фильтровать через сообщения с переменными значениями мета, отправить из формы.

Если бы кто-нибудь мог указать мне в правильном направлении, он был бы весьма признателен.


Чтобы дать Вам идею, это то, что фильтр выглядит следующим образом:

Custom post type filter


EDIT
После внушения xphan, я редактировал мой код, как это так, однако var_dump ничего не возвращает, даже если _GET заполнены правильно.

<?php 
    $propertyPrice  = $_GET['price']; 
    $propertyRegion  = $_GET['region']; 
    if($propertyRegion === 'all') { $propertyRegion = array('ibiza-city', 'southwest', 'north', 'east', 'center'); } 
    $propertyType  = $_GET['type']; 
    if($propertyType === 'all') { $propertyType = array('villa', 'apartment', 'plot'); } 
    $propertyStyle  = $_GET['style']; 
    if($propertyStyle === 'all') { $propertyStyle = array('rustic', 'modern'); } 
    $hasSeaview   = $_GET['seaview']; 
    if(isset($hasSeaview)) { $hasSeaview = 1; } 
    $hasSeaAccess  = $_GET['sea-access']; 
    if(isset($hasSeaAccess)) { $hasSeaAccess = 1; } 
    $hasSwimmingPool = $_GET['swimming-pool']; 
    if(isset($hasSwimmingPool)) { $hasSwimmingPool = 1; } 
    $hasReformProject = $_GET['reform-project']; 
    if(isset($hasReformProject)) { $hasReformProject = 1; } 
?> 

<?php 

echo $propertyRegion .'<br>'; 
echo $propertyType .'<br>'; 
echo $propertyStyle .'<br>'; 
echo $propertyPrice .'<br>'; 
?> 
<?php if(isset($propertyPrice) || isset($propertyRegion) || isset($propertyType) || isset($propertyStyle) || isset($hasSeaview) || isset($hasSeaAccess) || isset($hasSwimmingPool) || isset($hasReformProject)) { 
    $args = array(
     'post_type' => 'villas', 
     'meta_query' => array(
      array(
       'key' => 'property-price', 
       'value' => $propertyPrice 
      ), 
      array(
       'key' => 'property-region', 
       'value' => $propertyRegion, 
       'compare' => 'IN' 
      ), 
      array(
       'key' => 'property-type', 
       'value' => $propertyType, 
       'compare' => 'IN' 
      ), 
      array(
       'key' => 'property-style', 
       'value' => $propertyStyle, 
       'compare' => 'IN' 
      ), 
      array(
       'key' => 'sea-view', 
       'value' => $hasSeaview 
      ) 
     ) 
    ); 

    $the_query = new WP_Query($args); 

    if ($the_query->have_posts()) { 
     while ($the_query->have_posts()) { 
      $the_query->the_post(); ?> 

      <?php var_dump($the_query->the_post()); ?> 

<?php 
     } 
    } else { 
     // no posts found 
    } 
    /* Restore original Post Data */ 
    wp_reset_postdata(); 

} 

ответ

1

Вы можете передать массив значений с атрибутом вашего meta_queryvalue. Далее вы можете указать отношение, которое должны иметь целевые метазначения с вашими предоставленными значениями.

Вот пример, где вы ищете должность, которая имеет (помимо сопоставления propert-price мета значения) либо value1 или value2 сохраняются в мета-поле property-region

$args = array(
    'meta_query' => array(
     'relation' => 'OR' 
     array(
      'key' => 'property-price', 
      'value' => $propertyPrice, 
     ), 
     array(
      'key' => 'property-region', 
      'value' => array('value1', 'value2'), 
      'compare' => 'IN' 
     ) 
    ) 
);