Пользовательский тип записи WP_Query по нескольким настраиваемым полям

Хорошо, ребята, я в пути над головой.

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

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

Данные, которые я отправляю, включают в себя:
- Регион, тип, стиль выбора полей;
- Вид на море, выход к морю, бассейн, флажки проекта реформирования;
- Поле ввода цены

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

    $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......
            )
        );
    }

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

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


Чтобы дать вам представление, вот как выглядит фильтр:

Пользовательский тип фильтра


РЕДАКТИРОВАТЬ
После предложения 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 ответ

Решение

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

Вот пример, где вы ищете сообщение, которое имеет (помимо соответствия 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'
        )
    )
);
Другие вопросы по тегам