我正在努力跟随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>
谁能给我指一下正确的方向吗。谢谢
最合适的回答,由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
, 设置
type
到
POST
, 像这样:
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.