在wordpress中,我添加了一个设置偏移量的函数,如下所示:
add_action(\'pre_get_posts\', \'myprefix_query_offset\', 1 );
function myprefix_query_offset(&$query) {
if ( ! $query->is_home() ) {
return;
}
$offset = 1;
$ppp = 3;
if ( $query->is_paged ) {
$page_offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'offset\', $page_offset );
}
else {
$query->set(\'offset\',$offset);
}
}
此函数的作用是添加1的偏移量,以便不显示第一篇文章。很好,很完美。
但当然是用“!query->is\\u home“它会从我网站上的每个查询中略微删除第一篇帖子。
我需要做的是将此函数仅应用于一个查询。
所以我的问题是:我如何选择一个特定的查询,是否可能,甚至可能,我是否需要以其他方式进行选择?
______________________对我有效的解决方案__________________________
我可以在我的模板页面“页面博客”的循环中设置“offset”参数。php“像这样而不破坏分页(在functions.php中):
add_action(\'pre_get_posts\', \'myprefix_query_offset\', 1 );
function myprefix_query_offset(&$query) {
if ( !is_page_template( \'page-blog.php\' ) ) {
return ;
}
$offset = 1;
$ppp = 3;
if ( $query->is_paged() ) {
$page_offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'offset\', $page_offset );
}
else {
$query->set(\'offset\',$offset);
}
}
因此,现在它将offset参数应用于该页上已分页的所有循环。为了使其仅适用于已分页的查询,我必须将参数“posts\\u per\\u page”=>-1添加到未分页且不需要偏移量的查询中。因此,在我的情况下,这是:
$featured_item = array(
\'post_type\'=> \'post\',
\'status\' => \'publish\',
\'posts_per_page\'=> -1
);
get_posts($featured_item);
这个解决方案允许单独显示最新的帖子,当然也允许使用分页和偏移量显示所有帖子。也许有人会用到它。
非常感谢s\\U h\\U dum,我永远感谢你的帮助!
最合适的回答,由SO网友:s_ha_dum 整理而成
如果您只希望实现一个查询,那么只需通过offset
参数数组中的参数。
$offset = 1;
$ppp = 3;
if ( $query->is_paged ) {
$page_offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
}
blog_items = array(
\'post_type\'=> \'post\',
\'paged\' => $paged,
\'posts_per_page\'=> $ppp,
\'status\' => \'publish\',
\'offset\' => $offset
);
$blogposts = get_posts($blog_items);
但是,由于您正在尝试分页,因此可能仍有问题。让所有的论点都通过可能会更好
pre_get_posts
不仅仅是其中的一些:
// in functions.php
add_action(\'pre_get_posts\', \'myprefix_query_offset\', 1 );
function myprefix_query_offset(&$query) {
if (is_main_query() || is_page_template( \'page-blog.php\' ) ) {
$offset = 1;
$ppp = 3;
if ( $query->is_paged ) {
$page_offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'offset\', $page_offset );
}
else {
$query->set(\'offset\',$offset);
}
$query->set(\'post_type\',\'post\');
$query->set(\'paged\',$paged);
$query->set(\'posts_per_page\',3);
$query->set(\'status\',\'publish\');
}
}
那么页面模板中的正常循环应该可以工作:
if(have_posts()) {
while(have_posts()) {
the_post();
}
}
使用
remove_action(\'pre_get_posts\', \'myprefix_query_offset\', 1 );
删除操作。