Too Long ; Didn\'t Read
在使用ajax创建查询时,如何使分页工作?
我正在创建一个功能性搜索页面,允许用户过滤每页的帖子数量。我不太明白如何创建它,以便分页功能正确,希望有人能向我解释一下。我知道,通过在PHP ajax操作中创建一个新查询,我可以创建新的分页,并且不会改变正常的WP\\U查询,因此我需要使用ajax创建分页功能,但我不确定如何将其连接到某个ajax自定义查询。
function implement_ajax() {
$ppp = 10;
if(isset($_GET[\'ppp\']))
$ppp = $_GET[\'ppp\'];
$search = $_GET[\'s\']; // Acquired and sent via ajax
$paged = 1;
if(isset($_GET[\'paged\']))
$paged = $_GET[\'paged\'];
$temp = new WP_Query(array(\'s\' => $search, \'posts_per_page\' => $ppp));
$numPosts = $temp->post_count;
$foundPosts = $temp->found_posts;
$lastPage = $temp->max_num_pages;
ob_start();
if($temp->have_posts()) :
$i = 0;
?>
<?php if($temp->max_num_pages > 1) : ?>
<div class="pagination">
<?php
$big = 999999999;
echo paginate_links(array(\'base\' => \'/\', \'format\' => \'?paged=%#%\', \'current\' => max( 1, get_query_var(\'paged\') ), \'total\' => $temp->max_num_pages));
?>
<div class="clear"></div>
</div> <!-- class="pagination" -->
<?php endif; ?>
<div id="postContainer">
<?php while($temp->have_posts()) :
$temp->the_post();
$i++;
?>
<div class="custom-post<?php echo ($i%2 == 0) ? \' even\' : \'\'; echo ($i == $numPosts) ? \' last\' : \'\'; echo ($i == 1) ? \' first\' : \'\'; ?>">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
</div> <!-- class="custom-post" -->
<?php endwhile; ?>
</div> <!-- id="postContainer" -->
<?php else : ?>
<div id="postContainer">
<div id="content">
<p>No articles found.</p>
<p><a href="<?php echo home_url(); ?>">Return Home</a></p>
</div> <!-- id="content" -->
</div> <!-- id="postContainer" -->
<?php endif;
$htmlContent = ob_get_clean();
echo $htmlContent;
exit;
}
add_action(\'wp_ajax_nopriv_implement_ajax\', \'implement_ajax\');
add_action(\'wp_ajax_implement_ajax\', \'implement_ajax\');
上面返回了正确的查询-但分页被破坏,因为我不确定如何设置
base
参数我试过了
(\'/?s=\'.$search.\'?paged=\'.$paged)
和
/
还有其他一些让我一事无成的。如果我在法典中使用“基本示例”:
str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) )
paginate\\u链接返回:
/wp-admin/admin-ajax.php?action=implement_ajax&ppp=1&s=web&paged=2
返回正确的帖子,减去页眉、页脚和样式。
我试图复制通用汽车在this question 使用本地化脚本,但无法通过$args = (array) filter_var(INPUT_POST, \'query\');
因为参数2应为整数。我试图将我的$\\u POST[\'query\']转换为数组,但未能实现。
Relevant File Pastebins:
- Search Page
- Relevant Functions
- Ajax Jquery
警告-那里可能有一些遗迹,我一直在不断地评论,试图让它发挥作用。
最合适的回答,由SO网友:Milo 整理而成
我想这就是你想要的。base
通过设置home_url()
, 格式为page/%#%/
, 通过添加搜索查询参数add_args
如果存在:
$args = array(
\'base\' => home_url( \'/%_%\' ),
\'format\' => \'page/%#%/\',
\'current\' => max( 1, get_query_var(\'paged\') ),
\'total\' => $temp->max_num_pages,
);
if( isset($_GET[\'s\']) ){
$args[\'add_args\'] = array(
\'s\' => $_GET[\'s\'] // your search query passed via your ajax function
);
}
echo paginate_links( $args );