将具有Ajax的数组传递到自定义端点

时间:2019-03-04 22:25:03

标签: javascript php ajax wordpress

我正在使用ajax将数据发送到自定义的rest端点。我这样做是因为我正在WP网站上创建过滤器功能。

现在,我一直试图让tax_query与前端使用JS收集的术语数组配合使用。不管我做什么,似乎都无法正常工作,而且我强烈怀疑这只是我一直忽略的一个小错误...

请澄清一下,ajax成功发送了请求,但是无论如何查询都会返回所有帖子。

以下是前端使用的复选框:

<div class="form-group">
<?php
if( $terms = get_terms( array( 'taxonomy' => 'utst', 'hide_empty' => false, 'orderby' => 'name' ) ) ) : 

    foreach ( $terms as $term ) :
        echo '<div class="form-check">';
        echo '<label class="form-check-label" for="'.$term->slug.'"><input class="form-check-input" type="checkbox" id="'.$term->slug.'" name="utstyrAr[]" value="'.$term->term_id.'"> '.$term->name.'</label>'; // ID of the category as the value of an option
        echo '</div>';
    endforeach;
endif;
?>
</div>

JS(ajax函数):

filterOppdrag(fiOppdrag) {

    var utst = [];

    var utstyrArray = document.getElementsByName("utstyrAr[]");

    for (var i = 0; i < utstyrArray.length; i++) {
      if(utstyrArray[i].type =='checkbox' && utstyrArray[i].checked == true) utst.push(utstyrArray[i].value);
    }
    console.log(utst);

    $.ajax({
      url: the.root + '/wp-json/myfilter/v1/filter',
      type: 'GET',
      data: {
             'checkUtst'    : utst,
           },
      success: (response) => {
        console.log(response);
      },
      error: (response) => {
        console.log(response);
      } 
    });
    }

和wp_query(php):

function myFilter ($data) {

        $checkUtst          = sanitize_text_field($data['checkUtst']);

        //Main $args
          $args = array(
            'post_type'     => 'ml_opp', // Query only "ml_opp" custom posts
            'post_status'   => 'publish', // Query only posts with publish status
            'orderby'       => 'date', // Sort posts by date
            'order'         => 'ASC' // ASC or DESC
          );

          // for taxonomies / utstyr
          if( isset( $utstyr ) )
            $args['tax_query'] = array(
              array(
                'taxonomy'  => 'ml_utst',
                'field'     => 'id',
                'terms'     => $checkUtst
              )
            );

          $query = new WP_Query( $args );

          if( $query->have_posts() ) :
            while( $query->have_posts() ): $query->the_post();
              echo '<h2>' . $query->post->post_title . '</h2>';
            endwhile;
            wp_reset_postdata();
          else :
            echo 'No posts found';
          endif;
          die();
    }

无论我经历什么,这都会返回所有帖子,无论其条款如何。我没有收到错误消息,是的,我已经测试过,以便在将其发送到查询时在数组中有值。但是我不知道那里的路上发生了什么。这就是为什么我认为这可能只是我在这里犯的菜鸟错误。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您是否尝试过删除包装数组而不使用键?

            $args = array(
                'taxonomy'  => 'ml_utst',
                'field'     => 'id',
                'terms'     => $checkUtst
            );