栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

WordPress分页不适用于AJAX

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WordPress分页不适用于AJAX

我可以为您想到三个选择:

  1. 编写自己的版本
    get_pagenum_link()
    将允许您指定基本URL
  2. $_SERVER['REQUEST_URI']
    调用时覆盖变量
    get_pagenum_link()
  3. 要调用该
    paginate_links()
    函数,请返回整个分页的HTML,然后使用JS处理该HTML,以仅使用prev / next链接。

#1的自定义版本
get_pagenum_link()

优点:您必须更改少量当前代码-基本上只需更改要调用的函数的名称并传递一个额外的参数即可。

缺点:如果功能将来会更改(不太可能,但可能),则还必须调整功能。

我将只发布自定义函数的相关代码-您可以假设其他所有内容都可以保留在核心版本中。

function my_get_pagenum_link( $pagenum = 1, $escape = true, $base = null ) {    global $wp_rewrite;    $pagenum = (int) $pagenum;    $request = $base ? remove_query_arg( 'paged', $base ) : remove_query_arg( 'paged' );

因此,在这种情况下,我们还有一个参数允许我们指定基本URL-由您来硬编码URL(不是一个好主意)或动态生成它。以下是处理AJAX请求的代码将如何更改:

my_get_pagenum_link( $paged - 1, true, 'http://localhost:1234/vendor_new/display-vendor-results' );

就是这个解决方案。


#2覆盖
$_SERVER['REQUEST_URI']
变量

优点:实施起来比较容易,应该是面向未来的。

缺点:可能有副作用(理论上不应该,但你永远不知道);您可能需要编辑JS代码。

你可以用一个值,你在后端覆盖它,或与您通过您的AJAX请求的值(所以在你的AJAX请求,你可以有实例的参数,

base
那会是这样的
window.location.pathname+window.location.search
)。区别在于,在第二种情况下,您的JS可以在任何页面上运行(如果将来您最终拥有多个位置时使用同一AJAX处理程序)。

我将发布覆盖变量的代码,然后将其还原。

// Static base - making it dynamic is highly recommended$base = '/vendor_new/display-vendor-results';$orig_req_uri = $_SERVER['REQUEST_URI'];// Overwrite the REQUEST_URI variable$_SERVER['REQUEST_URI'] = $base;// Get the pagination linkget_pagenum_link( $paged - 1 );// Restore the original REQUEST_URI - in case anything else would resort on it$_SERVER['REQUEST_URI'] = $orig_req_uri;

此处发生的是,我们只是使用自己的变量覆盖了REQUEST_URI变量-这样,我们就使add_query_arg函数误以为是在/ vendor_new /
display-vendor-results页面上,而不是在/ wp-admin / admin- ajax.php


#3通过
paginate_links()
JS 使用和操作HTML

优点:目前无法真正想到任何东西。

缺点:您必须同时调整PHP和Javascript代码。

这是一个主意:您可以使用

paginate_links()
它的参数来创建所有分页链接(嗯-至少有四个-
prev / next和first /
last)。然后,您将所有这些HTML作为响应中的参数传递(如果使用JSON,或者如果您只是返回HTML,则作为响应的一部分)。

PHP代码:

global $wp_rewrite, $wp_query;// Again - hard pred, you should make it dynamic though$base = trailingslashit( 'http://localhost:1234/vendor_new/display-vendor-results' ) . "{$wp_rewrite->pagination_base}/%#%/";$html = '<div >' . paginate_links( array(    'base' => $base,    'format' => '?paged=%#%',    'current' => max( 1, $paged ),    'total' => $wp_query->max_num_pages,    'mid_size' => 0,    'end_size' => 1,) ) . '</div>';

JS代码(应该在您的AJAX成功回调中):

// the html variable is supposed to hold the AJAX response// either just the pagination or the whole responsejQuery( html ).find('.mypagination > *:not(.page-numbers.next,.page-numbers.prev)').remove();

在这里发生的是,我们找到了

<div >
除prev / next链接之外的所有元素,然后将其删除。


总结一下:

最简单的解决方案可能是 #2 ,但如果有人出于某种原因需要知道当前页面为admin-ajax.php ,而
你生成的链接,那么你可能有一个问题。可能甚至没有人会注意到,因为这将是您的代码正在运行,并且可能附加到过滤器的任何功能也应该认为它们在您需要的页面上(否则它们可能会弄乱某些内容)。

PS:如果由我决定,我将始终使用paginate_links()函数并在前端显示页码。然后,我将使用相同的函数在AJAX处理程序中生成更新的HTML。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号