0

我正在尝试使用自定义端点对我的项目中的一种自定义帖子类型进行呼叫。

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

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

可能是什么错误?

4

1 回答 1

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

并保持其他一切不变。

于 2019-08-09T14:30:19.753 回答