Wordpress元查询不适用于动态参数

时间:2019-08-09 10:57:54

标签: wordpress meta-query

我正在尝试使用自定义端点调用项目上一种自定义帖子类型。

我正在将动态参数传递给该函数-

     // $per_page = $_GET['per_page'];
        // $page = $_GET['page'];
        $per_page = 18;
        $page = 1;

        $type = $_GET['type'];
        $order = $_GET['order'];

        // $houseType = $_GET['houseType'];
        $houseType = 'Terreno';
        $houseState = $_GET['houseState'];
        $houseArea = $_GET['houseArea'];
        $housePrice = $_GET['housePrice'];
        $houseRooms = $_GET['houseRooms'];
        // $houseProp = $_GET['houseProp'];
        $houseProp = 'venda';

        $meta_query = array();

        if( $houseProp ) {
            $meta_query[] = array(
                'key'     => 'tipo_de_operacao',
                'value'   => $houseProp,
                'compare'   => '=',
            );
        }

        if ( $houseType ) {
            $meta_query[] = array(
                'key'     => 'tipo_de_imovel',
                'value'   => $houseType,
                'compare'   => '=',
            );
        }

        if ( $houseState ) {
            $meta_query[] = array(
                'key'     => 'estado_do_imovel',
                'value'   => $houseState,
                'compare'   => '=',
            );
        }

        if ( $houseArea ) {
            $meta_query[] = array(
                'key'       => 'area_bruta',
                'value'     => $houseArea[0],
                'type'      => 'NUMERIC',
                'compare'   => '>'
            );
            $meta_query[] = array(
                'key'       => 'area_bruta',
                'value'     => $houseArea[1],
                'type'      => 'NUMERIC',
                'compare'   => '<'
            );
        }

        if ( $housePrice ) {
            $meta_query[] = array(
                'key'       => 'preco',
                'value'     => $housePrice[0],
                'type'      => 'NUMERIC',
                'compare'   => '>'
            );
            $meta_query[] = array(
                'key'       => 'preco',
                'value'     => $housePrice[1],
                'type'      => 'NUMERIC',
                'compare'   => '<'
            );
        }

        if ( $houseRooms ) {
            $meta_query[] = array(
                'key'       => 'quartos',
                'value'     => $houseRooms[0],
                'type'      => 'NUMERIC',
                'compare'   => '>'
            );
            $meta_query[] = array(
                'key'       => 'quartos',
                'value'     => $houseRooms[1],
                'type'      => 'NUMERIC',
                'compare'   => '<'
            );
        }

        if ( $type == "preco") {
            $orderBy = array(
                'meta_key' => $type,
                'orderby' => 'meta_value_num',
                'order' => $order,
            );
        } else {
            $orderBy = array(
                'orderby' => array(
                    'date' => $order,
                    'menu_order'=> $order,
                )
            );
        }  



        $args = array_merge($orderBy, array(
            'post_type' => 'imoveis',
            'posts_per_page' => $per_page,
            'paged' => $page,
            'meta_query' => $meta_query,
        ));

        // get posts
        $posts = get_posts($args);

问题在于$ meta_query无法正常工作...

如果仅传递1个参数(houseProp),则可以使用$ meta_query [0]使该参数生效,但如果传递更多参数,则不返回任何内容。

我在做什么错了?

编辑:

我能够看到我需要在后端更新我的帖子(按“更新”按钮)。

我正在创建这样的帖子:

    $post_id = wp_insert_post(array(
        'post_title' => $house->InfoGeral->SubTipoImovel,
        'post_type' => 'imoveis',
        'post_content' => $description[0],
        'post_status'  => 'publish')
    );

并像这样填充ACF自定义字段:

    update_field('field_5d230e2057fa5', $ref, $post_id);

可能是什么错误?

1 个答案:

答案 0 :(得分:0)

当您使用$meta_query时,它将使用'relation'属性,并且默认为'AND'。例如,当您使用一个参数进行设置时,例如您的示例:

$meta_query[] = array(
   'key'     => 'tipo_de_operacao',
   'value'   => $houseProp,
   'compare'   => '=',
);

您实际上将其设置为:

$meta_query = array(
    'relation' => 'AND',
    array(
       'key'     => 'tipo_de_operacao',
       'value'   => $houseProp,
       'compare' => '=',
    )
 );

因此,现在当您添加一堆其他参数时,它实际上看起来像这样:

$meta_query = array(
   'relation' => 'AND',
   array(
       'key'     => 'tipo_de_operacao',
       'value'   => $houseProp,
       'compare' => '=',
   ),
   array(
       'key'     => 'area_bruta',
       'value'   => $houseArea[0],
       'type'    => 'NUMERIC',
       'compare' => '>'
   ),
   array(
       'key'     => 'area_bruta',
       'value'   => $houseArea[1],
       'type'    => 'NUMERIC',
       'compare' => '<'
   )
);

所以我的猜测是,您开始真正将结果缩小到这个,那个和另一个东西,这可能太严格了。如果这是您的目标,则可以将“关系”属性更改为“或”,或尝试对其进行重新编码以减少限制。

您可以通过更改以下行来解决此问题:

$meta_query = array();

收件人:

$meta_query = array( 'relation' => 'OR' );

并保持其他所有内容不变。