Wordpress SLUGS:用页面覆盖类别?

Posted

技术标签:

【中文标题】Wordpress SLUGS:用页面覆盖类别?【英文标题】:Wordpress SLUGS: Override categories with pages? 【发布时间】:2017-02-14 18:11:30 【问题描述】:

所以我正在使用 Wordpress 开发一个大型媒体网站。我想创建自定义的类别页面,而不是始终使用一揽子模板。

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

假设我当前的永久链接/网址如下所示:

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.

这似乎好得令人难以置信?谁能看到我不这样做的任何原因,尤其是当该站点将来将由非编码类型使用时,他们希望能够使用仪表板而不是后端进行轻松更改?

提前致谢。

【问题讨论】:

嗯,视频类别的链接是domain.com/videos,子页面的链接是domain.com/c/videos。对吗? 对不起,我应该说类别的永久链接已更改为 /c/。因此,在我拥有子页面之前,视频类别的链接是 domain.com/c/videos,一旦我拥有子页面,子页面的链接就是 domain.com/c/videos。如果我点击该 URL,我会访问子页面,而不是类别存档。 我一直在尝试这样做,但在我的安装中,类别页面会覆盖“页面”页面。还尝试使用 Yoast seo 插件删除类别 slug ......与匹配相同的问题。确实访问了永久链接页面(并保存)以刷新重写规则,但没有去... 【参考方案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' );

【讨论】:

以上是关于Wordpress SLUGS:用页面覆盖类别?的主要内容,如果未能解决你的问题,请参考以下文章

将图像覆盖添加到特定类别的缩略图 - wordpress

从 URL 获取参数 slugs

WordPress:如何将类别页面标题更改为仅类别名称?

自定义 wordpress 类别循环列表页面

WordPress - 带有类别列表的主题选项页面

如何让 Wordpress 页面覆盖现有目录(不是子目录)?