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:用页面覆盖类别?的主要内容,如果未能解决你的问题,请参考以下文章