我似乎找到了一个解决方案,这比我想象的要复杂得多。再次明确一点,假设我有一个这样的页面:
<header></header>
<main>
<!-- Posts from query (see question) inserted here -->
<!-- Pagination Links from query (see question) inserted here -->
</main>
<footer></footer>
生成
<main>
第二部分,我使用一个函数来保存问题的代码
function A
, 返回要插入的内容
<main>
作为HTML字符串。因此,在页面加载时,我只需插入
function A
进入
<main>
部分
然后,我的页面上有一个按钮,可以重新调用function A
通过wp-ajax,并替换<main>
通过另外使用s
WP\\u查询中的参数,如我的问题中所述。
内容和分页链接都已成功更新,但有一个区别:wp-admin/admin-ajax.php?ranum=0.825265473159516
添加到每个分页链接的URL中,该随机数可能是为了避免缓存子页面结果。当单击其中一个分页链接时,我得到一个400错误,没有请求/响应数据,结果显示一个空白页面,显示0。网络分析中没有显示其他有用的内容。
然后我发现this post. 这说明如何将搜索字符串参数添加到URL,以便能够在更新的分页过程中使用它。我这样做了,然后编辑了search.php
通过使用$_GET["s"]
的参数function A
打电话进来search.php
, 现在一切都成功了。中更改的代码function A
是:
$paginate_args = [
\'base\' => home_url( \'/%_%\' ),
\'format\' => \'page/%#%/\',
\'current\' => max( 1, get_query_var(\'paged\') ),
\'total\' => $posts->max_num_pages
];
// $query_string holds the sanitized input of the typed string
// into the search field
if( $query_string !== "" ) {
$paginate_args[\'add_args\'] = array( \'s\' => $query_string );
}
$output .= "<div id=\\"post-navigation-links\\">".
paginate_links( $paginate_args ).
"</div>";
包含搜索过滤帖子的更新页面的分页现在可以完美工作。有趣的是,链接的结构现在是:
https://example.ch/page/3/?s=star&ranum=0.3987907805552596
所以
wp-admin/admin-ajax.php
部分已从链接中删除,但我们现在也正在加载另一个页面(搜索页面),而不仅仅是发出AJAX请求。现在可以了,但我不知道如何/是否可以让这种行为在AJAX请求中工作,也不知道实际的问题是什么。当然,最好还是找到一个AJAX解决方案,以避免每次分页都需要重新加载整个页面,但这似乎是wp分页中的默认行为。也许您最好开发自己的分页脚本,为每个分页请求设置8的特定偏移量和post限制,或者类似的。。
问题可能与我之前使用的get_pagenum_link(1)
作为分页的基本URL,这就是为什么通过AJAX调用时,分页链接包含AJAX URL部分。。尽管如此,当只使用新的home_url( \'/%_%\' )
, 当您单击其中一个新分页链接时,您将进入初始分页的相应页面,加载在页面加载上;因此,唯一的解决方案似乎是我在回答中指定的解决方案(页面重新加载+搜索页面)或自定义AJAX脚本,如前所述。