如何在AJAX搜索中获取页面列表

时间:2018-03-27 作者:pv619

我正在努力跟随this 解决方案,这是一种工作,但我需要一个页面列表,而不是帖子。

这是我正在使用wordpress的Codex信息处理的代码,但我没有得到任何结果。

功能。php

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\' => \'page\' ) );
if( $the_query->get_pages() ) :
    while( $the_query->get_pages() ): $the_query->get_pages(); ?>

        <h2><a href="<?php echo esc_url( get_permalink() ); ?>"><?php the_title();?></a></h2>

    <?php endwhile;
    wp_reset_postdata();  
endif;

die();
}
Ajax调用:

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: \'page\',
    data: { action: \'data_fetch\', keyword: jQuery(\'#keyword\').val() },
    success: function(data) {
        jQuery(\'#datafetch\').html( data );
    }
});
}
</script>
HTML表单:

<input type="text" name="keyword" id="keyword" onkeyup="fetch()"></input>
<div id="datafetch">Search results will appear here</div>
谁能给我指一下正确的方向吗。谢谢

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

没有get_pages() 中的方法WP_Query class (适用于WordPress版本4.9.4)。

所以在data_fetch() function, 更换以下部件:

if( $the_query->get_pages() ) :
    while( $the_query->get_pages() ): $the_query->get_pages(); ?>
。。使用此选项:

if( $the_query->have_posts() ) :
    while( $the_query->have_posts() ): $the_query->the_post(); ?>
fetch() JS公司function, 设置typePOST, 像这样:

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 );
    }
});
}
提示:在data_fetch() function, 我建议您使用wp_die() 而不是die(). 您还应该使用wp_reset_query() 代替wp_reset_postdata() 因为你在定制WP_Query 呼叫

[编辑]回复以下评论:

我可以问一下如何只显示父页面的子页面吗?

在HTML表单中,可以添加隐藏的input 它存储父页的ID,然后将该值添加到data 在AJAX请求中。然后在WP_Query 呼叫(在data_fetch() function), 您可以使用post_parent 设置父页的ID。

参见示例代码here.

结束

相关推荐

我可以检查用户是否正在执行任何AJAX请求吗?

我创建了一个自定义用户meta,其名称为last_activity.我使用此元来获取用户上次活动的日期,并且每次用户使用WordPress打开页面时,我都会更新此元wp_head 行动我的问题是,用户可能在不刷新页面的情况下通过ajax执行某些操作,因此请确保last_activity meta将不会更新。因此,我的问题是,我是否可以检查当前用户是否执行任何ajax请求,如果是,是否可以do_action?