Wordpress에서 AJAX를 사용하여 게시물과 사용자 지정 게시 유형을 모두 표시하는 검색 기능을 만들려고합니다. 지금까지 필자는 원하는대로 거의 모든 작업을 수행했지만 AJAX 결과에는 고급 사용자 지정 필드로 출력되는 내용을 검색 할 수 없습니다.고급 사용자 지정 필드의 데이터가 포함 된 Ajax 검색 기능
예 : 내 게시물 중 하나에 "Skittles"에 대한 언급이 있지만, "Skittles"를 검색하면 AJAX 결과에서 아무 것도 발견되지 않습니다. 그러나 내가 입력을 치고 별도의 검색 결과 페이지에서 끝나면 "Skittles"라는 단어가 포함 된 게시물을 찾을 수 있지만 원하는 동작이 아닙니다.
아래 코드는 사용자 정의 필드를 검색 할 수있게합니다. 검색 결과는 Wordpress의 검색 결과 페이지에 표시됩니다.
/**
* Finds custom fields meta data in search results
* http://adambalee.com
*/
function cf_search_join($join) {
global $wpdb;
if (is_search()) {
$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
return $join;
}
add_filter('posts_join', 'cf_search_join');
function cf_search_where($where) {
global $wpdb;
if (is_search()) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where);
}
return $where;
}
add_filter('posts_where', 'cf_search_where');
function cf_search_distinct($where) {
global $wpdb;
if (is_search()) {
return "DISTINCT";
}
return $where;
}
add_filter('posts_distinct', 'cf_search_distinct');
하지만 사람들이 Wordpress의 자체 검색 결과 페이지에 들기를 원하지 않습니다. 자바 스크립트와 함께
/**
* Adding ajax search functionality to the theme
* @return
*/
function dhemy_ajax_search() { // creating a search query
$args = array(
'post_type' => array('case', 'post'),
'post_status' => 'publish',
'order' => 'DESC',
'orderby' => 'date',
's' => $_POST['term'],
'posts_per_page' => 9999
);
$query = new WP_Query($args);
if($query->have_posts()) { // display results
while ($query->have_posts()) { $query->the_post(); ?>
<?php if(get_post_type() == 'case') { ?>
<?php // code output for the cpt called 'case' ?>
<?php } else { ?>
<?php // code output for regular posts ?>
<?php } ?>
<?php }
} else { ?>
<?php // code output for when there are no hits ?>
<?php } exit;
}
add_action('wp_ajax_nopriv_dhemy_ajax_search', 'dhemy_ajax_search');
add_action('wp_ajax_dhemy_ajax_search', 'dhemy_ajax_search');
:
여기가 AJAX 검색에 사용하는 코드는
$('#bigsearch').keyup(function(event) {
var searchTerm = $(this).val(); // get search term
if(!searchTerm.trim()) {
$('.search_overlay .flow .wrap .post_row').html('');
return;
}
else if(searchTerm.length > 0) { // send request when the lenght is greater than 0 letters
$.ajax({
url: BASE+'/wp-admin/admin-ajax.php',
type: "post",
data: {
'action':'dhemy_ajax_search',
'term':searchTerm
},
success: function(result) {
$('.search_overlay .flow .wrap .post_row').fadeIn().html(result);
}
});
}
});
는 WP_query
의 $args
에서 사용자 정의 필드에서 데이터를 포함 할 수 있습니까? 또는 첫 번째 기능을 실제 검색 기능과 결합 할 수 있습니까?