强制WordPress显示页面而不是类别

时间:2013-07-10 作者:Sid

我正试图在我的一个WordPress站点上创建一个思洛结构。

我总是在Yoast SEO插件上选中这个选项“从类别URL中删除类别库(通常为/category/)

所以我的分类页面有一个URL:sitename。com/apple/(其中“apple”是分类页)

现在我想用同样的鼻涕虫苹果创建一个新的“页面”。

然而,当我转到sitename时,我可以轻松创建一个新的“apple”页面。将显示com/apple/category页面,而不是新创建的页面。

我的问题是:有没有办法“覆盖”类别相对于页面的默认优先级?我想显示页面,因为我可以控制它——我可以自定义、添加更多内容,并可以轻松更改它们(此外,页面将帮助我更好地构建网站)

感谢您的帮助!

7 个回复
最合适的回答,由SO网友:Milo 整理而成

一种可能的解决方案是不更改类别库并保持原样,而是修改类别链接的任何输出,以通过过滤器去除类别库。如果您没有创建一个页面来代替这些链接指向的位置,那么这当然会导致404,因此需要为每个类别创建一个页面。

function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
    if( \'category\' != $taxonomy ) return $termlink;

    return str_replace( \'/category\', \'\', $termlink );
}
add_filter( \'term_link\', \'wpa_alter_cat_links\', 10, 3 );
你可能想彻底测试一下它的任何副作用,使用风险自负!

EDIT - 仅更改顶级类别链接:

function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
    if( \'category\' == $taxonomy && 0 == $term->parent ){
        return str_replace( \'/category\', \'\', $termlink );
    }
    return $termlink;
}
add_filter( \'term_link\', \'wpa_alter_cat_links\', 10, 3 );

SO网友:bencergazda

我创建了以下相当简单的函数,以便在加载内容时使页面比类别更重要。

(注意:这可能不是最好的,但是一个简单的方法。我发现一个问题,当使用高级自定义字段插件时,默认情况下,它不会插入旧页面或新页面的自定义字段。添加get_queried_object()->ID 作为ACFget_field()\'第二个参数解决了这个问题。在WP环境中仔细测试。)

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\' );
您可以将其包含在主题的功能中。php。这看起来可以与Yoast SEO插件配合使用。

SO网友:Paul Woods

这里有一个超级简单、完美的答案:https://stackoverflow.com/questions/32310453/make-wordpress-use-the-page-instead-of-category

对于完整性:

Background

<示例。com是一个域,我有一个名为“foobar”的WP页面,其中包含内容,我有一个名为“foobar”的WP帖子类别,我有一个名为“foobar有趣的事情”的WP帖子,类别设置为“foobar”

Expectations

<当我去举例的时候。com/foobar,我想查看关于foobars的页面,而不是显示所有具有该类别的博客文章的WP类别页面Setup

这是我的设置(它不需要任何额外的插件或代码编辑)几个已安装的插件是WP Rocket和Yoast,我将在本线程中重点介绍它们。

WP仪表板->设置->永久链接

选择“Custom Structure”(自定义结构),并在字段中输入/%category%/%postname%/

在同一页上,将“类别基础”更改为单点。“”(没有引号,只有一个点/句点/句号

我安装了Yoast,我设置它是为了覆盖永久链接设置,但我相信这会把我手头的任务搞砸。

WP Dashboard->SEO->Advanced->Permalinks(选项卡)

更改URL->删除类别库…=保持

然后需要清除缓存。我使用WP Rocket进行缓存,所以我刷新了缓存,现在一切都正常了。

Edit: 确保在步骤3和5之后保存更改

SO网友:JMau

视情况而定。如果您试图用相同的URL设置两个不同的页面,这不是一个好主意。但如果你不关心分类页面,你可以将它们重定向到你的页面。

 RedirectMatch 301 ^/category/(.*)$ /$1
此代码进入.htaccess 并将/类别/页面重定向到/页面/

SO网友:qccreative

实现这一点的“WordPress方法”是为您的类别页面创建一个自定义php模板,并在那里应用您的自定义设置,而不是创建一个唯一的“页面”

还有许多插件允许您将图像和其他自定义字段添加到类别存档页面,如果您不想修改主题文件,这可能是一个更好的选择。

或者,我建议添加一个类别库,它可能是您的主要目标关键字之一

SO网友:Vale

首先剥离yoast中的类别没有索引yoast中的类别,但在此之前,永久链接结构应设置为/%类别%/%postname%/

SO网友:Eduardo Antón

抱歉,您在@bencergazda answer中没有足够的声誉发表评论。

我觉得这是最好的解决办法。但是我在标题主题中显示的图像有一个错误,因为没有得到正确的post-id。

对于解决方案,我将在代码中添加文本行:“quot;全球$员额$发布->;ID=$匹配页面->;ID"E;

结果

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
    global $post; $post->ID = $matchingPage->ID;
    query_posts( \'page_id=\' . $matchingPage->ID );
    include( get_template_directory() . \'/page.php\');
    die();
}
add_filter( \'category_template\', \'loadPageFirst\' );
致以最诚挚的问候

结束

相关推荐

Categories to A News Page

我正在尝试使用类别来让我的所有帖子(在类别新闻中)转到我网站的新闻页面。我用一些帖子和一个“分类新闻”创建了“新闻”类别。从类别复制的php文件。php,但我不知道如何让帖子转到新闻页面。我试着从不同的论坛上模仿那些试图做类似事情的人的步骤,但我没有成功地复制他们。如果我转到我的页面。我可以在那里看到我的帖子。但我想做的是转到我的页面。com/news和类别将在那里。有人知道我需要采取什么进一步的措施才能使这项工作正常进行吗?谢谢西亚兰