实时过滤多个分类查询

时间:2019-03-05 17:39:35

标签: php ajax wordpress filtering

我正在创建一个前端过滤器,其中包含访问者可以单击以根据分类法对帖子进行排序的复选框。他们可以过滤的帖子是自定义帖子类型,并附加了3个分类法。

这是一个自定义的ajax实时过滤器,因此,只要有人单击复选框,就将返回结果,而不会加载页面和提交按钮。

前端工作正常,发送到端点的信息也很好,并且如果我将查询范围缩小到仅一个分类标准,那么一切都会按预期工作,而无论我将过滤范围缩小到什么分类标准。但是在查询中有多个分类法时,我遇到了问题。这是我第一次创建类似这样的东西,所以我希望这只是我没有想到的小事,但是无论我尝试什么,分类法过滤器只会按第一个具有以下术语的分类法进行过滤:已选中。

示例:

税收1 税2 税3

如果单击的第一个复选框属于税收1 ,则只会在税收1 中进行过滤。如果我尝试单击属于 Tax 2 Tax 3 的复选框,它将完全忽略这些条款/税,仍然仅按第一个分类法进行过滤。

我知道我在查询中做错了什么,所以我真的希望这里的某人可以给我一些指导,以使我能做得很好。

以下是端点(查询):

def solution(number):

    bits = [int(digit) for digit in bin(number)[2:]]
    occurences = [i for i, bit in enumerate(bits) if(bit==1)]
    res = [occurences[counter+1]-a-1 for counter, a in enumerate(occurences) if(counter+1 < len(occurences))]

    if(not res):
        print("Gap: 0")
    else:
        print("Gap: ", max(res))

number = 1042
solution(number)

1 个答案:

答案 0 :(得分:0)

您所有的isset条件都被错误地解释为与tax_query相匹配。请参见下面更新的代码段,并与您的代码段进行比较以找出不同之处。

function myFilter ($data) {

    $checkFylker          = $data['checkFylker'];
    $checkUtstyr          = $data['checkUtstyr'];
    $checkFors            = $data['checkFors'];
    $checkType            = $data['checkType'];


    //return $results;


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

    $args['tax_query'] = array( 'relation'=>'AND' ); // AND means that all conditions of meta_query should be true

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

    //for taxonomies / forsendelse
    if( isset( $checkFors ) )
      $args['tax_query'][] = array(
          'taxonomy'  => 'ml_forsendelse',
          'field'     => 'id',
          'terms'     => $checkFors
      );

    // for taxonomies / fylker
    if( isset( $checkFylker ) )
      $args['tax_query'][] = array(
          'taxonomy'  => 'ml_fylk',
          'field'     => 'id',
          'terms'     => $checkFylker
      );

    // for taxonomies / type
    if( isset( $checkType ) )
      $args['tax_query'][] = array(
          'taxonomy'  => 'ml_typ',
          'field'     => 'id',
          'terms'     => $checkType
     );

    $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();
  }