在此网站上,用户希望能够关闭分页,以便能够将搜索或类别查询的整个结果发送到一个大文档中打印。看起来很明显,所以我惊讶地发现没有插件。。。现在也许我知道为什么了。
我一直在努力解决这个问题有一段时间了,我担心我对WordPress的理解不够。。。我一直在尝试的是:
向URL添加查询字符串:?onepageprint=1(起作用)
注册“禁用分页”函数(起作用)测试查询字符串并有条件调用该函数(不起作用)我认为我面临的问题是,分页在WordPress过程中设置得太早,在它到达我可以从URL中获取查询字符串并对其进行测试的位置之前(而不需要对核心进行黑客攻击!)
所以有两个问题和一个想法:
我这样做对吗我对这个问题的感觉是否正确,如果正确,是否有解决方法?如果这真的行不通(下面是最新的尝试)是否可以使用redirect_canonical
(我承认我一点也不理解!)我已经处理了这方面的无数变化-这是最新的尝试(尽管可能有一些重复)。设置查询字符串并将其从URL中取出似乎可以很好地工作,并且禁用分页的功能也可以工作。。。但当它就位时,它总是工作(或从不工作),我找不到任何有条件地打开和关闭它的方法:
在函数中。php:
/* register custom query var (from URL) to toggle pagination */
function jr_add_query_vars_filter( $displayvars ){
$displayvars[] = "onepageprint";
return $displayvars;
}
add_filter( \'query_vars\', \'jr_add_query_vars_filter\' );
get_query_var( \'onepageprint\', 0 );
/* disable pagination conditionally on custom query var setting (from URL query string)
* NOT WORKING YET */
add_Action(\'init\', \'remove_pagination\');
function remove_pagination() {
if ( ! $onepageprint == 1 )
return; // stop here.
/* Disable content pagination, based on
* https://wp-types.com/forums/topic/remove-pagination-from-archive-view/ */
add_action(\'parse_query\', \'no_nopaging\');
function no_nopaging($query) {
$query->set(\'nopaging\', 1);
}
}
在页面模板中(许多尝试之一)——我想这或类似的东西需要在两个搜索中都使用。php和归档。php:
// call no-pagination function - DIDN\'T WORK
if ( $onepageprint == 1 ) {
no_nopaging($query);
}
我希望这有点道理,如果您还需要我的配置来回答,请告诉我。不幸的是,我不能发布到实际网站的链接,因为这是一个私人研究网站,而且上面的一切都是机密的!
即使是一些更好的方法也很好。非常感谢。
[编辑:发布后标题改善!]
最合适的回答,由SO网友:JHoffmann 整理而成
我认为应该通过pre_get_posts
:
function wpse_254661_remove_pagination( $query ) {
if ( $query->is_main_query() && get_query_var( \'onepageprint\', 0 ) ) {
$query->query_vars[\'nopaging\'] = 1;
$query->query_vars[\'posts_per_page\'] = -1;
}
}
add_action( \'pre_get_posts\', \'wpse_254661_remove_pagination\' );
这样,您就可以在获取查询之前修改查询,并将查询对象通过钩子传递到函数中。还有一个只影响主查询的检查。