我使用的自动完成代码如下:
functions.php
// add the ajax fetch js
add_action( \'wp_footer\', \'ajax_fetch\' );
function ajax_fetch() {
?>
<script type="text/javascript">
function fetch(){
jQuery.ajax({
url: \'<?php echo admin_url(\'admin-ajax.php\'); ?>\',
type: \'post\',
data: { action: \'data_fetch\', keyword: jQuery(\'#keyword\').val() },
success: function(data) {
jQuery(\'#datafetch\').html( data );
}
});
}
</script>
<?php }
// the ajax function
add_action(\'wp_ajax_data_fetch\' , \'data_fetch\');
add_action(\'wp_ajax_nopriv_data_fetch\',\'data_fetch\');
function data_fetch(){
$the_query = new WP_Query(
array(
\'posts_per_page\' => -1,
\'s\' => esc_attr( $_POST[\'keyword\'] ),
\'post_type\' => \'post\',
),
);
if( $the_query->have_posts() ) :
?><ul><?php
while( $the_query->have_posts() ): $the_query->the_post();
$myquery = esc_attr( $_POST[\'keyword\'] );
$a = $myquery;
$search = get_the_title();
if( stripos("/{$search}/", $a) !== false) {?>
<li><a class="articles-link" href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a> by <?php the_author(); ?></li>
<?php }
endwhile;
wp_reset_postdata();
?></ul><?php
endif;
die();
}
Page template.php
<input type="text" name="keyword" id="keyword" onkeyup="fetch()"></input>
<div id="datafetch">Search results will appear here</div>
这对于自动完成帖子搜索非常有用,但我很难允许它按作者姓名(使用角色->;author)而不是或以及帖子标题进行搜索。
我尝试使用WP\\u User\\u查询代替WP\\u查询,如下所示:
$args = array (
\'role\' => \'author\',
\'s\' => esc_attr( $_POST[\'keyword\'] ),
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo \'<li><span>\' . esc_html( $user->display_name ) . \'</span></li>\';
}
}
die();
}
这只是列出了每个作者的名单。是否有方法使用
while( $the_query->have_posts() ): $the_query->the_post();
而不是
foreach ( $user_query->results as $user ) {
? 或者是否有其他方法允许搜索通过用户名搜索来显示自动完成的帖子列表?我不知道怎么做。
非常感谢。