WordPress使用自动完成功能按作者姓名搜索文章

时间:2021-09-17 作者:mrmotivator

我使用的自动完成代码如下:

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 ) {? 或者是否有其他方法允许搜索通过用户名搜索来显示自动完成的帖子列表?我不知道怎么做。

非常感谢。

1 个回复
最合适的回答,由SO网友:Howard E 整理而成

WP\\u User\\u查询使用参数search 而不是shttps://developer.wordpress.org/reference/classes/wp_user_query/#search-parameters

所以试试这个

$args = array (
    \'role\'           => \'author\',
    \'search\' => esc_attr( $_POST[\'keyword\'] ),
);

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post