因此, 我正在寻找一种获取最新帖子的方法, 以便以不同于其余帖子的方式显示它。在设置中, 我可以像通常每个人一样在”
博客”
页面上显示帖子。
我尝试的第一件事(另一个问题的答案)是使用常规循环, 即if(have_posts())…
while(have_posts())等。在该IF上方, 放置另一个IF只是为了获取最新帖子, 通过这种方式, 我可以为上一篇帖子设置样式。但是, 由于我有分页, 所以每页上的最新帖子实际上是该页面上的最新帖子, 而不是真正的最新帖子。希望这是可以理解的。
我的第二次尝试是从正常循环中排除最新帖子, 为此, 我使用了一篇文章的摘要, 该文章解释了如何使用pre_get_posts和found_posts排除最新帖子并保持分页, 因此我的代码如下:
add_action('pre_get_posts', 'myprefix_query_offset', 1 );
function myprefix_query_offset(&
$query) {//Before anything else, make sure this is the right query...
if ( ! $query->
is_home() ) {
return;
}//First, define your desired offset...
$offset = 1;
//Next, determine how many posts per page you want (we'll use WordPress's settings)
$ppp = get_option('posts_per_page');
//Next, detect and handle pagination...
if ( $query->
is_paged ) {//Manually determine page query offset (offset + current page (minus one) x posts per page)
$page_offset = $offset + ( ($query->
query_vars['paged']-1) * $ppp );
//Apply adjust page offset
$query->
set('offset', $page_offset );
}
else {//This is the first page. Just use the offset...
$query->
set('offset', $offset);
}
}add_filter('found_posts', 'myprefix_adjust_offset_pagination', 1, 2 );
function myprefix_adjust_offset_pagination($found_posts, $query) {//Define our offset again...
$offset = 1;
//Ensure we're modifying the right query object...
if ( $query->
is_home() ) {
//Reduce WordPress's found_posts count by the offset...
return $found_posts - $offset;
}
return $found_posts;
}
到目前为止一切顺利, 此代码有效, 并且不包括最新文章, 并且分页有效, 但是现在我的问题是, 如何获得最新文章?我试图在home.php循环中的上方使用wp_query来获取该最新帖子, 但意识到pre_get_posts会覆盖wp_query吗?
我该如何解决并获取最新帖子?我必须做相反的事情吗?我的意思是, 首先获取最新帖子, 然后为其余帖子创建自定义循环, 但是如何管理分页?
到目前为止, 这是我在home.php中的html
<
div class="blog-list">
<
div class="blog-item featured-item">
// display latest post here
<
/div>
<
?php if ( have_posts() ): ?>
<
div class="teaser-inner mb-4">
<
div class="row">
<
?php while ( have_posts() ): ?>
<
?php the_post();
?>
<
div class="blog-item col-md-6 mb-3 mb-sm-5">
<
div class="row">
<
div class="col-6 col-md-4">
<
?php $img_url = get_the_post_thumbnail_url(get_the_ID(), 'full');
?>
<
a href="http://www.srcmini.com/<
?php echo esc_url( get_permalink() );
?>" class="blog-link">
<
div class="blog-item-img bg-cover" style="background-image:url(<
?php echo esc_url($img_url);
?>
)">
<
/div>
<
/a>
<
/div>
<
div class="col-6 col-md-8">
<
a href="http://www.srcmini.com/<
?php echo esc_url( get_permalink() );
?>">
<
?php the_title();
?>
<
/a>
<
/div>
<
/div>
<
/div>
<
?php endwhile;
?>
<
/div>
<
/div>
<
div class="blog-pagination">
<
?php echo paginate_links();
?>
<
/div>
<
?php endif;
?>
<
/div>
任何线索表示赞赏。
#1你的分页系统运行正常。你可以做什么, 它将使用wp_get_recent_posts检索最新帖子:
$latestPosts = wp_get_recent_posts(['numberposts' =>
1]);
$latestPost = $latestPosts ? current($latestPosts) : null;
然后在你的div中, 你可以使用$ latestPost显示最新帖子的信息。
<
?php if ($latestPost): ?>
<
div class="blog-item featured-item">
// display latest post here
<
/div>
<
?php endif;
?>
【在博客页面上获取最新帖子】为了使上述方法起作用, 你需要对pre_get_posts进行一些更改, 以确保仅在主要查询条件下才更改查询:
if (! $query->
is_home() || ! $query->
is_main_query()) {
return;
}
推荐阅读
- 在产品类别上获取wp_Query的类别名称/子类别,以根据类别显示产品列表
- 获取要在[playlist]短代码中使用的上传音频文件的ID的函数
- Docker - 修改docker 镜像地址加快下载速度
- Paloalto防火墙GlobalProtect设置及更改默认443端口
- Centos7.6 PostgreSQL 源码编译安装
- Docker - 重新启动关闭的容器
- 主管发话(一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了)
- Redhat6.9配置网卡bond
- 编程之旅——编程常出现的错误(警醒)