Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress自定义查询用于搜索的多个元键和元值_Php_Mysql_Wordpress_Select_Meta Query - Fatal编程技术网

Php WordPress自定义查询用于搜索的多个元键和元值

Php WordPress自定义查询用于搜索的多个元键和元值,php,mysql,wordpress,select,meta-query,Php,Mysql,Wordpress,Select,Meta Query,我有三个多选下拉列表。还使用AJAX使用WP_查询获取数据 过程:如果我选择第一个或任何下拉式从页面,然后它将返回一个结果。然后选择第二个下拉列表,然后它将设置“和”关系以获取结果,这意味着公共结果应该返回 我在设置不同选择之间的关系时遇到了一个问题 请帮帮我 下面是代码:Filter.js var test1 = []; var test2 = []; var test3 = []; var ajaxurl = ajaxfilter.ajax_url; jQuery(

我有三个多选下拉列表。还使用AJAX使用WP_查询获取数据

过程:如果我选择第一个或任何下拉式从页面,然后它将返回一个结果。然后选择第二个下拉列表,然后它将设置“和”关系以获取结果,这意味着公共结果应该返回

我在设置不同选择之间的关系时遇到了一个问题

请帮帮我

下面是代码: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();   
        }
    }

?>

谢谢大家!

@sayed Mohd Ali,你能给我提个建议吗?我很乐意,但你的问题不清楚你想做什么,你需要用一个例子更清楚地说明。“你想达到什么目标,你现在得到了什么?”埃德莫达利说,好吧,让我在同一篇文章中解释一下。
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 ('') )