Пользовательский запрос WordPress для нескольких мета-ключей и мета-значений для поиска - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть три DropDown с множественным выбором.Также использовал AJAX для получения данных с использованием WP_Query.

Процесс: если я сначала выберу ИЛИ любой DropDown со страницы, тогда он вернет результат.Затем выберите второй DropDown, затем он установит отношение «И» для получения результата, что означает, что общий результат должен возвращаться.

Я столкнулся с проблемой с установкой отношения между различными вариантами выбора.

Пожалуйста,помогите мне!

Вот код: Filter.js

    var test1 = [];
    var test2 = [];
    var test3 = [];

var ajaxurl = ajaxfilter.ajax_url;
jQuery(document).ready(function() {

    jQuery('#domaine').on('change', function() {
        test1 = jQuery(this).val();

        if (test1 !== null) {
            var data = {
                action: 'get_fill_portfolio',
                opt_domaine: test1,
                opt_status: test2,
                opt_fond: test3
            }
            jQuery.post(ajaxurl, data, function(response) {
                jQuery('.load-state').html(response);
            });
        }

    });

    jQuery('#status').on('change', function() {
        test2 = jQuery(this).val();


        if (test2 !== null) {
            var data = {
                action: 'get_fill_portfolio',
                opt_domaine: test1,
                opt_status: test2,
                opt_fond: test3

            }
            jQuery.post(ajaxurl, data, function(response) {
                jQuery('.load-state').html(response);
            });
        }

    });

    jQuery('#fond').on('change', function() {

        test3 = jQuery(this).val();


        if (test3 !== null) {
            var data = {
                action: 'get_fill_portfolio',
                opt_domaine: test1,
                opt_status: test2,
                opt_fond: test3

            }
            jQuery.post(ajaxurl, data, function(response) {
                jQuery('.load-state').html(response);

            });
        }

    });

Functions.php

add_action('wp_ajax_get_fill_portfolio', 'get_fill_portfolio');
add_action('wp_ajax_nopriv_get_fill_portfolio', 'get_fill_portfolio');
// Select Dropdown List
function get_fill_portfolio() 
{   

   /* check_ajax_referer( 'load_states', 'security' );

    $return = array();
    echo $return;
    wp_die(); // You missed this too*/

    $all_portfolio = [];
    global $post;

    $opt_domaine = $_POST['opt_domaine'];
    $opt_status = $_POST['opt_status'];
    $opt_fond = $_POST['opt_fond'];


    $string = rtrim(implode(',', $opt_domaine), ',');
    $string1 = rtrim(implode(',', $opt_status), ',');
    $string2 = rtrim(implode(',', $opt_fond), ',');


    $args = array(
        'post_type' => 'stm_portfolio',
        'post_status'    => 'publish',
        'orderby'        => 'menu_order',
        'order'          => 'ASC',
        'posts_per_page' => -1,
        'meta_query' => array(
            'relation' => 'OR',

           array(
              'relation' => 'AND',
              'mnf_domaine' =>  array(
                'key' => 'mnf_domaine',
                'value' => $string,
                'compare' => 'IN'
                ),
            ),

            array(
                'relation' => 'AND',
            'mnf_status' => array(
                'key' => 'mnf_status',
                'value' => $string1,
                'compare' => 'IN'
                ),
            ),  

          array(
                'relation' => 'AND',
                'mnf_fond' => array(
                'key' => 'mnf_fond',
                'value' => $string2,
                'compare' => 'IN'
                )
             )
            )
    );

$query_s = new WP_Query( $args );

    if ( $query_s->have_posts() ) { 

        while ( $query_s->have_posts() ) : $query_s->the_post();
            $all_portfolio[] = [
                'name' => get_the_title( $post->ID),
                'mnf_site_web'  => get_field('mnf_site_web', $post->ID),
                'link'   => get_permalink($post->ID),
                'mnf_domaine'  => get_field('mnf_domaine', $post->ID),
                'mnf_status'  => get_field('mnf_status', $post->ID),
                'mnf_fond'  => get_field('mnf_fond', $post->ID),
                'img_url'  => get_the_post_thumbnail_url( $post->ID, 'full' )
            ];
        endwhile;

        if ( $all_portfolio ) : 
            $domaine = get_field_object('mnf_domaine'); 
            $status = get_field_object('mnf_status'); 
            $fond = get_field_object('mnf_fond'); 

        endif;  

?>

 <div class="logo-filter">
        <div class="row">
            <?php foreach ( $all_portfolio as $portfolio ) : ?>
                    <div class="col-md-3 col-sm-4 col-xs-6">
                    <a href="<?=$portfolio['link']?>" target="" class="logo-link">
                        <img alt="<?=$portfolio['name']?>" src="<?=$portfolio['img_url']?>">
                    </a>    
                    </div>
            <?php endforeach; ?>
        </div>
    </div>
<?php
        wp_reset_query();   
        }
    }

?>

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

В настоящее время у меня есть три выпадающих.Итак, здесь я хочу реализовать функцию поиска согласно множественному выбору из выпадающего списка.Когда я использую 'relation' => 'AND', тогда мне нужно выбрать три раскрывающихся меню, а затем вернуть результаты.Итак, я попытался использовать 'relation' => 'OR' Так что он возвращает все результаты.

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

Я хочуустановить запрос как

AND ( 
  ( wp_postmeta.meta_key = 'mnf_domaine' AND wp_postmeta.meta_value IN ('media', 'media1') ) 
  AND
  ( mt1.meta_key = 'mnf_status' AND mt1.meta_value IN ('test1', 'test2') ) 
  OR 
  ( mt2.meta_key = 'mnf_fond' AND mt2.meta_value IN ('') )

Спасибо!

...