Intereting Posts
Word 403.php WordPress не найден, сервер по умолчанию использует собственную страницу 404 Apache Создать пустую страницу администратора из плагина Пользовательский фильтр запроса по пользовательскому полю даты ACF длительная задержка перед загрузкой веб-сайта из-за wp_footer () Указание существующих отображаемых изображений на ведро s3 Строгие стандарты: объявление описания_walker :: start_el () и предупреждение ninjaforms не будет заполнять пользовательскую тему Какие изменения необходимы для того, чтобы этот условный код работал на более глубоких уровнях? Способы обработки SVG-рендеринга в wordpress? Виджет обратного отсчета Выпадающее меню текущих дочерних страниц Получить конкретную часть шаблона, если пользовательское поле – это некоторая ценность Проблема сжатия WordPress PNG генерация po mo переводов файлов с нуля в WordPress темы 2 Петли на одной странице – разбиение на две части петли игнорирует массив исключенных должностей

Как фильтровать сообщения по таксомони, используя AJAX

Я нашел это сообщение, в котором описывается, как фильтровать сообщения категории с помощью Ajax, и он отлично работает, но я также хочу отфильтровать свои пользовательские таксономии таким же образом, и я не могу заставить его работать. Он показывает мне все сообщения, а не только сообщения из моей таксономии.

Я знаю, что меню нужно изменить на get_the_terms вместо get_the_categories но мне особенно нужна помощь в том, что нужно изменить в функции jQuery и в php-функции внизу. Я попытался добавить tax_query вызывающий мою таксономию, но он все еще не показывает правильные сообщения. Может ли кто-нибудь помочь указать мне в правильном направлении?

Solutions Collecting From Web of "Как фильтровать сообщения по таксомони, используя AJAX"

Я понял! Вот код, который я использовал:

Добавьте к functions.php :

 add_action( 'wp_ajax_nopriv_load-filter2', 'prefix_load_term_posts' ); add_action( 'wp_ajax_load-filter2', 'prefix_load_term_posts' ); function prefix_load_term_posts () { $term_id = $_POST[ 'term' ]; $args = array ( 'term' => $term_id, 'posts_per_page' => -1, 'order' => 'DESC', 'tax_query' => array( array( 'taxonomy' => 'yourtaxonomyhere', 'field' => 'id', 'terms' => $term_id, 'operator' => 'IN' ) ) ); global $post; $myposts = get_posts( $args ); ob_start (); ?> <ul class="list"> <?php foreach( $myposts as $post ) : setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php echo get_post_meta($post->ID, 'image', $single = true); ?></a><br /> <?php the_title(); ?></li> <?php endforeach; ?> </ul> <?php wp_reset_postdata(); $response = ob_get_contents(); ob_end_clean(); echo $response; die(1); } 

Скрипт jQuery:

 <script> function term_ajax_get(termID) { jQuery("a.ajax").removeClass("current"); jQuery("a.ajax").addClass("current"); //adds class current to the category menu item being displayed so you can style it with css jQuery("#loading-animation").show(); var ajaxurl = 'http://yourdomain.com/wp-admin/admin-ajax.php'; jQuery.ajax({ type: 'POST', url: ajaxurl, data: {"action": "load-filter2", term: termID }, success: function(response) { jQuery("#category-post-content").html(response); jQuery("#loading-animation").hide(); return false; } }); } </script> 

Я не использую функцию для перечисления категорий, я просто перечисляю каждую из них отдельно. Замените номер идентификатором вашего термина:

 <ul class="nav"> <li id="term-166"><a class="yourtermname ajax" onclick="term_ajax_get('166');" href="#">Your Term Name</a></li> <li id="term-354"><a class="yourtermname ajax" onclick="term_ajax_get('354');" href="#">Your Term Name</a></li> </ul> 

Кроме того, если вы хотите отфильтровать теги вместо терминов, замените:

  • 'term' с 'tag__in' ,
  • $term_id с $tag_id
  • и измените 'taxonomy' => 'yourtaxonomyhere' на 'taxonomy' => 'post_tag' .

Я предлагаю вам использовать короткий код для отображения таксономии по вашему выбору: создать класс для объявления короткого кода и вызвать эту функцию

  public function shortcode($atts) { extract(shortcode_atts( array( 'data' => 'taxonomy', 'taxonomy' => 'category', //get_terms arguments 'parent' => 0, //only get top level terms by default 'exclude'=>'', 'type'=>'radio' // checkbox,radio ), $atts,'astSearchInput' )); $arrStr =array(); $arrStr[]= "<div class='astSearchInput " . $taxonomy. "' taxonomy='" .$taxonomy. "'>" ; if ($type=="checkbox" || $type=="radio") { if ($data=="taxonomy") { //echo $datatata; $arrValues=get_terms($taxonomy, array("parent"=>$parent, "exclude"=>$exclude)); } if ($type=="checkbox")$arrStr[]= $this->inputCheckBox($arrValues,$atts); if ($type=="radio")$arrStr[]= $this->inputRadio($arrValues,$atts); } $arrStr[]= "</div>"; $str=join("\n",$arrStr); return $str ; } function inputCheckBox($arrValues,$attr) { $arrStr =array(); $arrStr[]='<div class="formcb">'; foreach($arrValues as $k=>$term) { $title=$term->name; //$term->description // print_r($term); $id="cb" . $term->term_id; $arrStr[]='<div class="cb"><input class="astInpuntTerm astcheckBox" type="checkbox" id="' . $id .'" value="' . $term->term_id . '" ><label for="' . $id . '">' . $title. '</label></div>'; } $arrStr[]='</div>'; $str=join("\n",$arrStr); return $str; } ,  public function shortcode($atts) { extract(shortcode_atts( array( 'data' => 'taxonomy', 'taxonomy' => 'category', //get_terms arguments 'parent' => 0, //only get top level terms by default 'exclude'=>'', 'type'=>'radio' // checkbox,radio ), $atts,'astSearchInput' )); $arrStr =array(); $arrStr[]= "<div class='astSearchInput " . $taxonomy. "' taxonomy='" .$taxonomy. "'>" ; if ($type=="checkbox" || $type=="radio") { if ($data=="taxonomy") { //echo $datatata; $arrValues=get_terms($taxonomy, array("parent"=>$parent, "exclude"=>$exclude)); } if ($type=="checkbox")$arrStr[]= $this->inputCheckBox($arrValues,$atts); if ($type=="radio")$arrStr[]= $this->inputRadio($arrValues,$atts); } $arrStr[]= "</div>"; $str=join("\n",$arrStr); return $str ; } function inputCheckBox($arrValues,$attr) { $arrStr =array(); $arrStr[]='<div class="formcb">'; foreach($arrValues as $k=>$term) { $title=$term->name; //$term->description // print_r($term); $id="cb" . $term->term_id; $arrStr[]='<div class="cb"><input class="astInpuntTerm astcheckBox" type="checkbox" id="' . $id .'" value="' . $term->term_id . '" ><label for="' . $id . '">' . $title. '</label></div>'; } $arrStr[]='</div>'; $str=join("\n",$arrStr); return $str; } ,  public function shortcode($atts) { extract(shortcode_atts( array( 'data' => 'taxonomy', 'taxonomy' => 'category', //get_terms arguments 'parent' => 0, //only get top level terms by default 'exclude'=>'', 'type'=>'radio' // checkbox,radio ), $atts,'astSearchInput' )); $arrStr =array(); $arrStr[]= "<div class='astSearchInput " . $taxonomy. "' taxonomy='" .$taxonomy. "'>" ; if ($type=="checkbox" || $type=="radio") { if ($data=="taxonomy") { //echo $datatata; $arrValues=get_terms($taxonomy, array("parent"=>$parent, "exclude"=>$exclude)); } if ($type=="checkbox")$arrStr[]= $this->inputCheckBox($arrValues,$atts); if ($type=="radio")$arrStr[]= $this->inputRadio($arrValues,$atts); } $arrStr[]= "</div>"; $str=join("\n",$arrStr); return $str ; } function inputCheckBox($arrValues,$attr) { $arrStr =array(); $arrStr[]='<div class="formcb">'; foreach($arrValues as $k=>$term) { $title=$term->name; //$term->description // print_r($term); $id="cb" . $term->term_id; $arrStr[]='<div class="cb"><input class="astInpuntTerm astcheckBox" type="checkbox" id="' . $id .'" value="' . $term->term_id . '" ><label for="' . $id . '">' . $title. '</label></div>'; } $arrStr[]='</div>'; $str=join("\n",$arrStr); return $str; } ,  public function shortcode($atts) { extract(shortcode_atts( array( 'data' => 'taxonomy', 'taxonomy' => 'category', //get_terms arguments 'parent' => 0, //only get top level terms by default 'exclude'=>'', 'type'=>'radio' // checkbox,radio ), $atts,'astSearchInput' )); $arrStr =array(); $arrStr[]= "<div class='astSearchInput " . $taxonomy. "' taxonomy='" .$taxonomy. "'>" ; if ($type=="checkbox" || $type=="radio") { if ($data=="taxonomy") { //echo $datatata; $arrValues=get_terms($taxonomy, array("parent"=>$parent, "exclude"=>$exclude)); } if ($type=="checkbox")$arrStr[]= $this->inputCheckBox($arrValues,$atts); if ($type=="radio")$arrStr[]= $this->inputRadio($arrValues,$atts); } $arrStr[]= "</div>"; $str=join("\n",$arrStr); return $str ; } function inputCheckBox($arrValues,$attr) { $arrStr =array(); $arrStr[]='<div class="formcb">'; foreach($arrValues as $k=>$term) { $title=$term->name; //$term->description // print_r($term); $id="cb" . $term->term_id; $arrStr[]='<div class="cb"><input class="astInpuntTerm astcheckBox" type="checkbox" id="' . $id .'" value="' . $term->term_id . '" ><label for="' . $id . '">' . $title. '</label></div>'; } $arrStr[]='</div>'; $str=join("\n",$arrStr); return $str; } 

http://www.webmasterbulletin.net/wordpress-ajax-taxonomy-search-shortcode

У меня была аналогичная проблема.

Код хорош, но он нуждается в небольшом изменении для работы.

  $args = array ( 'term' => $term_id, 'posts_per_page' => -1, 'order' => 'DESC', 'tax_query' => array( array( 'taxonomy' => 'yourtaxonomyhere', 'field' => 'id', 'terms' => $term_id, 'operator' => 'IN' ) ), 'post_type' => 'yourcustomposttype', // <== this was missing 'posts_per_page' => 10, 'order' => 'DESC' );