问题描述

我想在我的首页 (总是最新的) 上有一个单独的帖子,但是让正常的分页工作。所以首页有帖子 1,下一页应该有帖子 2-11(1-10 也不错),然后是 12-21 或 11-20,依此类推。我知道我可以 change the number of posts depending on the context,但设置为”1″ 在主页意味着更多的页面也只显示一个职位。

我的主要问题是/page/2/等工作,但是/page/1/总是重定向到真正的主页,/。这意味着第 2-10 页总是被跳过,因为第 2 页显示 11-20 。我 currently 通过链接到我的存档来解决这个问题,但是当你来到 the first posts of the year 并且没有明显的持续的方式的时候,这不是很理想。

最佳解决思路

我用 offset 查询参数解决了这个问题。这允许我在 pre_get_posts 钩子中编辑查询,并且似乎是最干净的方法,没有新的查询。现在主页只显示一个帖子,page/2/显示帖子 2-11 。所有链接保持工作,不需要其他修改。

add_action('pre_get_posts', 'set_offset_on_front_page');
function _set_offset_on_front_page(&$query)
{
    if (is_front_page() && is_paged()) {
            $posts_per_page = isset($query->query_vars['posts_per_page']) ? $query->query_vars['posts_per_page'] : get_option('posts_per_page');
            // If you want to use 'offset', set it to something that passes empty()
            // 0 will not work, but adding 0.1 does (it gets normalized via absint())
            // I use + 1, so it ignores the first post that is already on the front page
            $query->query_vars['offset'] = (($query->query_vars['paged'] - 2) * $posts_per_page) + 1;
    }
}

次佳解决思路

好的,也许这是一个奇怪或复杂的方法来做到这一点,但是我也有一个类似的问题 (我想在头版显示一个欢迎的文本和一个特定类别的三个最新的帖子,所以我做到了:

  1. 创建了一个名为 home 的新页面,并将我的欢迎文字放在上面。

  2. 停用默认主页,并将我的自定义主页设置为起始页

  3. 创建一个新的 (复制和修改的现有) 页面模板

    1. 让它显示页面正文

    2. 加载类别 X 的三个最新帖子并显示它们

    3. 有一个链接下面的链接”more” /category /category-x /

看起来像这样:http://hinek.de(页面是德语,对不起)

如果这可能是您的方式,您需要更多的信息或代码示例的页面模板,评论和我将编辑此帖子。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。