Живой фильтр нескольких запросов таксономии - PullRequest
0 голосов
/ 05 марта 2019

Я создаю внешний интерфейсный фильтр, который содержит флажки, которые посетители могут нажимать для сортировки сообщений на основе таксономий. Сообщения, которые они могут фильтровать, представляют собой пользовательский тип сообщений с 3-мя таксономиями.

Это пользовательский живой фильтр ajax, поэтому, когда кто-то нажимает на флажок, возвращается результат, нет загрузки страницы и кнопки отправки.

Внешний интерфейс работает нормально, информация, отправляемая на конечную точку, в порядке, и если я сузю запрос до одной таксономии, все будет работать так, как ожидается, независимо от таксономии, к которой я сужу фильтр. Но с несколькими таксономиями в запросе я сталкиваюсь с проблемами. Это первый раз, когда я создаю что-то подобное, поэтому я надеюсь, что это всего лишь незначительная вещь, о которой я не задумывался, но, что бы я ни пытался, фильтр таксономии фильтрует только по первой таксономии, которая имеет термин, который проверено.

Пример:

Налог 1 Налог 2 Налог 3

Если первый установленный флажок принадлежит Налог 1 , он будет фильтроваться только в пределах Налог 1 . Если я пытаюсь установить флажок, относящийся к Налог 2 или Налог 3 , он полностью игнорирует эти условия / налог и по-прежнему фильтрует только первую таксономию.

Я знаю, что я делаю что-то не так в запросе, поэтому я очень надеюсь, что кто-то здесь, на SO, может дать мне некоторое представление о том, что я должен сделать, чтобы заставить это работать.

Вот конечная точка ( запрос ):

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(
        array(
          'taxonomy'  => 'ml_utstyr',
          'field'     => 'id',
          'terms'     => $checkUtstyr
        )
      );

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

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

    // for taxonomies / type
    if( isset( $checkType ) )
      $args['tax_query'] = array(
        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();
    }

1 Ответ

0 голосов
/ 28 мая 2019

Все ваши 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();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...