Intereting Posts

Как добавить автозаполнение к пользовательской таксономии для CPT

Я следовал этому руководству,

http://gabrieleromanato.name/adding-jquery-ui-autocomplete-to-the-wordpress-search-form/

и он работает так, как этот штраф. Тем не менее, я пытаюсь сделать эту работу автозаполнением на основе списка из пользовательских таксономий, которые я создал для CPT. Моя функция поиска выглядит так:

function hbgr_search() { $term = strtolower( $_GET['term'] ); $suggestions = array(); $input_args = array( 'post_type' => 'dealer-locator', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'zip_code', 'field' => 'slug', 'terms' => array( $term ), ), array( 'taxonomy' => 'city_served', 'field' => 'slug', 'terms' => array( $term ), ), ), ); $loop = new WP_Query( $input_args ); while( $loop->have_posts() ) { $loop->the_post(); $suggestion = array(); $suggestion['label'] = get_the_title(); $suggestion['link'] = get_permalink(); $suggestions[] = $suggestion; } wp_reset_query(); $response = wp_json_encode( $suggestions ); echo $response; exit(); } 

Код JS:

 (function( $ ) { $(function() { var url = MyAutocomplete.url + "?action=hbgr_search"; $( "#search-dealer" ).autocomplete({ source: url, delay: 300, minLength: 3 }); }); })( jQuery ); 

Если я прокомментирую свою строку PHP в $ loop = …. и заменим ее

 $loop = new WP_Query( 's=' . $term ); 

Тогда автозаполнение ajax отлично работает (если я ищу сообщение или страницу), поэтому я знаю, что он загружается правильно, просто что-то напуганное моими налоговыми запросами?

Я взял раздел WP_Query и протестировал его в своем собственном файле, чтобы убедиться, что он сработал, и это так.

EDIT: Если я изменю свою функцию на это, она также работает, возвращая список с тем, что я набираю в окне поиска …

 $suggestions = array(); $suggestion['label'] = $_GET['term']; $suggestion['link'] = 'http://google.com'; $suggestions[] = $suggestion; $response = wp_json_encode( $suggestions ); echo $response; exit(); 

Спасибо.

Логика в налоговых запросах очень маловероятна для проверки true .

Посмотри на это:

 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'zip_code', 'field' => 'slug', 'terms' => array( $term ), ), array( 'taxonomy' => 'city_served', 'field' => 'slug', 'terms' => array( $term ), ), ), 

Если вы читаете налоговый запрос, в нем говорится: получить сообщения, которые присвоили одно и то же значение ( $term ) в zip_code и city_served .

Обратите внимание, что вы установили связь AND между таксономиями и использовали одну и ту же переменную $term для обоих. Очень маловероятно, что почтовый индекс и название города имеют одинаковое значение.

Возможно, вам нужна другая логика:

 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'zip_code', 'field' => 'slug', 'terms' => array( $term ), ), array( 'taxonomy' => 'city_served', 'field' => 'slug', 'terms' => array( $term ), ), ), 

Кроме того, я не вижу ничего плохого в вашем коде, хотя вы не показываете полный код, поэтому я не могу быть уверен.

Я построил простой тест, используя стандартные типы почтовых постов, категории и тегов, и он работает:

PHP:

 add_action( 'wp_ajax_hbgr_search', 'hbgr_search' ); add_action( 'wp_ajax_nopriv_hbgr_search', 'hbgr_search' ); function hbgr_search() { $term = strtolower( $_GET['term'] ); $suggestions = array(); $input_args = array( 'post_type' => 'post', 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => array( $term ) ), array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => array( $term ) ), ), ); $loop = new WP_Query( $input_args); while( $loop->have_posts() ) { $loop->the_post(); $suggestion = array(); $suggestion['label'] = get_the_title(); $suggestion['link'] = get_permalink(); $suggestions[] = $suggestion; } wp_reset_postdata(); $response = wp_send_json( $suggestions ); } add_action( 'wp_enqueue_scripts', 'add_scripts' ); function add_scripts() { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-autocomplete' ); wp_register_style( 'jquery-ui-styles','http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css' ); wp_enqueue_style( 'jquery-ui-styles' ); wp_register_script( 'my-autocomplete', plugin_dir_url( __FILE__ ) . 'my-autocomplete.js', array( 'jquery', 'jquery-ui-autocomplete' ), '1.0', false ); wp_localize_script( 'my-autocomplete', 'MyAutocomplete', array( 'url' => admin_url( 'admin-ajax.php' ) ) ); wp_enqueue_script( 'my-autocomplete' ); } 

JavaScript (my-autocomplete.js):

 (function( $ ) { $(function() { var url = MyAutocomplete.url + "?action=hbgr_search"; $( "#search-dealer" ).autocomplete({ source: url, delay: 300, minLength: 3 }); }); })( jQuery ); 

Форма поиска:

 <form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" role="search"> <input id="search-dealer" type="search" placeholder="Search" name="s"> <button type="submit">Submit</button> </form>