如何在 WordPress 中渲染静态页面来代替类别页面而不需要重定向?

问题描述 投票:0回答:1

我正在开发一个 WordPress 网站 – 我有一个使用我购买的主题的页面构建器创建的静态页面(slug:“自定义页面”)和一个类别页面(slug:“新闻”)。

我想要实现的是,当用户导航到 url

/news
时,WP 应该呈现“自定义页面”的内容,就像用户直接导航到它一样,但不执行任何可见的重定向。该网址仍应显示
/news

我正在开发一个应该可以做到这一点的插件 - 我尝试使用

template_redirect
钩子 - 它部分起作用,显示了“自定义页面”内容,但是还出现了主题中的附加标题,这不是此页面的一部分,如果我直接导航到“/custom-page”,则不会显示。

任何人都可以提出解决方案或指出我可能缺少什么吗?

谢谢

wordpress wordpress-theming custom-wordpress-pages
1个回答
0
投票

要在 WordPress 中实现此目的,您可以使用 template_redirect 挂钩并修改查询,以在用户访问“/news”时从“自定义页面”加载内容。以下是您的插件的示例代码片段:

function custom_page_for_news() {
    // Check if we are on the 'news' category page
    if (is_category('news')) {
        // Set the query to load the content of 'custom-page'
        $custom_page = get_page_by_path('custom-page');
        if ($custom_page) {
            $GLOBALS['wp_query']->queried_object_id = $custom_page->ID;
            $GLOBALS['wp_query']->post = $custom_page;
            $GLOBALS['wp_query']->found_posts = 1;
            $GLOBALS['wp_query']->post_count = 1;
            $GLOBALS['wp_query']->max_num_pages = 1;
            $GLOBALS['wp_query']->is_page = true;
            $GLOBALS['wp_query']->is_singular = true;
            $GLOBALS['wp_query']->is_single = false;
            $GLOBALS['wp_query']->is_category = false;
            $GLOBALS['wp_query']->is_archive = false;
            $GLOBALS['wp_query']->is_home = false;
            $GLOBALS['wp_query']->is_404 = false;
        }
    }
}

add_action('template_redirect', 'custom_page_for_news');

此代码检查当前页面是否是“新闻”类别页面,如果是,则修改查询以从“自定义页面”加载内容。它应该添加到主题的functions.php 文件或自定义插件文件中。

注意:此方法假设“自定义页面”是页面而不是帖子。如果是帖子,您可能需要相应地调整代码。

此外,请记住,以这种方式修改查询可能会产生其他影响,您应该彻底测试以确保它与您的主题和其他插件配合良好。

© www.soinside.com 2019 - 2024. All rights reserved.