【发布时间】:2016-06-25 09:56:35
【问题描述】:
我正在使用 this wordpress 插件通过 AJAX 加载我的整个网站。
在标准 WP 查询上一切正常,但是当我尝试在通过 Ajax 加载后对自定义查询的结果进行分页时,Ajax 会将查询字符串插入到 URL 中,从而破坏链接。
分页网址的外观:
http://www.example.com/stuff/page/3
在 AJAX 加载后,它们呈现如下:
http://www.example.com/stuff/?_=1457614717299/page/3
我尝试使用以下两种方法在 Ajax 加载后重置基本 url,删除查询字符串,但两者都不起作用:
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
$pagination_args['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');
}
还有:
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
$pagination_args['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');
}
这是查询和分页的完整 php 代码(为清楚起见,没有如上所述重置基本 url):
$rows_per_page = 3;
$current = (intval(get_query_var('paged'))) ? intval(get_query_var('paged')) : 1;
$rows = $wpdb->get_results("SELECT post_id FROM wp_favorite_show WHERE user_id = $user_ID");
global $wp_rewrite;
$pagination_args = array(
'base' => @add_query_arg('paged','%#%'),
'format' => '',
'total' => ceil(sizeof($rows)/$rows_per_page),
'current' => $current,
'show_all' => false,
'type' => 'plain',
);
if( $wp_rewrite->using_permalinks() )
$pagination_args['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');
if( !empty($wp_query->query_vars['s']) )
$pagination_args['add_args'] = array('s'=>get_query_var('s'));
$start = ($current - 1) * $rows_per_page;
$end = $start + $rows_per_page;
$end = (sizeof($rows) < $end) ? sizeof($rows) : $end;
然后在我的循环之后,我会像这样显示分页:
echo paginate_links($pagination_args);
我也尝试了其他几种方法,但没有任何方法可以删除查询。
有人知道如何防止查询字符串被注入到返回的 Ajax 的 URL 中吗?
【问题讨论】:
标签: php jquery ajax wordpress pagination