Wordpress SLUGS:用页面覆盖类别?

时间:2016-10-06 05:56:30

标签: wordpress categories slug

所以我正在使用Wordpress在大型媒体网站上工作。我想创建自定义类别页面,而不是始终使用总括性模板。

我知道我可以复制php文件,重命名并自定义它们。但我遇到了一种更简单的方法,特别是在允许非编码类型进行更改方面。这看起来有点太容易了......

所以我要说我现在的固定链接/ URL如下所示:

POSTS: domain.com/2016/10/postname.html
CATEGORIES: domain.com/c/category-name/
PAGES: domain.com/page-name/

我发现我可以创建一个页面并给它永久链接/ c /,因此它看起来像这样:

domain.com/c/

我发现如果我创建一个子页面,使用/ c /作为父页面,它看起来像这样:

domain.com/c/page-name/

如果我将此页面作为类别提供相同的SLUG,然后单击进入该页面,该页面将覆盖该类别。更具体地说,假设我有一个名为视频的类别,然后我在/ c /父页面下创建了一个名为视频的页面,这种情况发生了:

The PAGE at /c/videos/
overrides the CATEGORY at /c/videos.

这似乎太好了,不是真的吗?任何人都可以看到我不会这样做的任何原因,特别是当该网站将来被非编码类型使用时,他们希望能够使用仪表板而不是后端进行简单的更改?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这需要在主题的function.php文件中添加一个小的过滤器。 我已从StakeOverflow的另一个答案中获取了此代码,您可以阅读here

function loadPageFirst() {
    // get the actual category
    $actualCategory = get_category( get_query_var('cat') );
    // get the page with the same slug
    $matchingPage = get_page_by_path( $actualCategory->slug );

    // If no match, load the normal listing template and exit (edit if you are using a custom listing template, eg. category.php)
    if (!$matchingPage) {
        include( get_template_directory() . '/archive.php');
        die();
    }

    // Make a new query with the page's ID and load the page template
    query_posts( 'page_id=' . $matchingPage->ID );
    include( get_template_directory() . '/page.php');
    die();
}
add_filter( 'category_template', 'loadPageFirst' );