【问题标题】:Wordpress meta query not working with dynamic parametersWordpress 元查询不适用于动态参数
【发布时间】:2019-08-09 10:57:54
【问题描述】:

我正在尝试使用自定义端点向我的项目中的一种自定义帖子类型拨打电话。

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

     // $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);

可能是什么错误?

【问题讨论】:

    标签: wordpress meta-query


    【解决方案1】:

    当您使用$meta_query 时,它使用“关系”属性并默认为“与”。例如,当您使用一个参数进行设置时,例如您的示例:

    $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' );
    

    并保持其他一切不变。

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 1970-01-01
      • 2018-08-04
      • 2013-08-07
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多