从Ajax加载的分页链接中删除查询字符串

时间:2016-03-10 13:54:34

标签: php jquery ajax wordpress pagination

我使用this wordpress插件通过AJAX加载我的整个网站。

在标准WP查询上一切正常,但是当我尝试在通过Ajax加载后对自定义查询的结果进行分页时,Ajax会将查询字符串插入到URL中,从而破坏链接。

分页网址的外观如何:

http://www.example.com/stuff/page/3

加载AJAX后,它们会像这样呈现:

http://www.example.com/stuff/?_=1457614717299/page/3

我尝试在Ajax加载后使用以下两种方法重置基本网址,删除查询字符串但两者都不起作用:

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代码(如上所述,为了清晰起见,没有重置基本网址):

$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网址?

1 个答案:

答案 0 :(得分:0)

好的,以防万一其他人遇到类似的问题,我设法让它运转起来。它绝不是理想的,它通过对基本URL进行硬编码来实现漂亮的链接。显然这在重复功能中没有用,但是如果你在单个页面模板中使用它(就像我一样)它会工作得很好:

 if( $wp_rewrite->using_permalinks() )
$pagination_args['base'] = 'http://www.example.com/stuff/' .'page/%#%/';