在类别档案上显示页面

时间:2017-04-26 作者:Shay S

我使用Yoast SEO插件删除了/category/slug

现在的帖子是这样的:例如。com/新闻/示例

而不是这个:示例。com/类别/新闻/示例

现在我的问题是,如果我想要一个页面使用与slug类别相同的slug,

我可以创建页面,但当我转到URL时,类别存档会显示出来。

我希望能够决定访问URL时将显示哪些内容、类别存档或页面

如果有人可以通过代码或其他任何方式帮助我做到这一点,我将能够对这两种方式使用相同的slug,但在类别归档上显示页面,这将非常有帮助

谢谢你的阅读,谢伊。

1 个回复
SO网友:WebElaine

Option #1

为每个类别添加一个主题文件,而不是为每个类别添加一个页面。您将创建一个名为category-news.php 它将仅显示在/news/处的新闻类别,以及其他类别的文件,例如category-other.php 将在/other/处为其他类别显示。然后只需在模板文件中放置您想要的任何内容。请注意,类别在WordPress中内置了一个“描述”,因此您可以在wp admin中编辑该部分,而无需在需要更改时始终编辑主题文件。

Option #2

或者,您可以创建一个名为category.php 并按以下方式编码:

<?php
get_header();
// get the current category
$category = get_category(get_query_var(\'cat\'));
// get the page whose slug matches this category\'s slug
$page = get_page_by_path($category->slug);
// display the page title as an h1 ?>
<h1><?php echo $page->post_title; ?></h1><?php
// display the page content
echo $page->post_content;
get_footer();
?>

Option #3

或者,在你的主题中functions.php:

<?php
add_filter(\'request\', function(array $query_vars) {
    // do nothing in wp-admin
    if(is_admin()) {
        return $query_vars;
    }
    // if the query is for a category
    if(isset($query_vars[\'category_name\'])) {
        // save the slug
        $pagename = $query_vars[\'category_name\'];
        // completely replace the query with a page query
        $query_vars = array(\'pagename\' => "$pagename");
    }
    return $query_vars;
});
?>
如果选择选项2或3,结果是相同的-WP将查找具有与类别slug匹配的slug的页面。然后,您可以在每个页面中包含您想要的任何内容,它将显示在类别中。您可能还希望在该类别中包含一个提要栏或其他一些帖子列表,以便人们能够从该类别转到某个单独的帖子。使用选项#2,您可以在中添加“显示其他帖子”代码category.php. 使用选项#3,您需要创建自定义页面模板(示例tpl-category.php) 并将其应用于每一页。

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。