CPT和带有父级的页面的自定义固定链接。高级WordPress

时间:2021-09-26 作者:Nadav

因此,我创建了一个CPT社区帖子:https://pastebin.com/9XSrvZAr

对于这个CPT,我创建了两个自定义分类法:https://pastebin.com/fNhfpiM6

community\\u post\\u domaincommunity\\u post\\u Type我的目标是,所有单个社区帖子的永久链接如下:https://example.com/community/%POST_DOMAIN_SLUG%/%POST_SLUG%因此,例如,如果我有一个标题为“Go Micro Services”的社区帖子,并且它的community\\u post\\u domain设置为一个名为Kubernetes的术语,那么permalink将是:https://example.com/community/kubernetes/go-micro-services.

这是我如何进行permalink操作的:https://pastebin.com/aP5rEBjY

此外,我还创建了一个静态页面:社区,其中包含永久链接:https://example.com/community.到目前为止,一切顺利。当我试图发布一个页面时,问题出现了,我希望它具有如下永久链接:https://example.com/community/%PAGE_SLUG%我创建了这个页面,比如说,Hello World。我将父级设置为社区页面。当我单击发布时,页面被创建,在WordPress仪表板中,我看到页面的永久链接与预期一致:https://example.com/community/hello-world但是,这才是真正的问题——当我试图访问页面的永久链接时,我得到了404。我尝试在WP dashboard中访问Permalinks并更新Permalinks,但没有帮助。有什么想法吗?

1 个回复
SO网友:Dario

对我的本地开发人员进行了快速测试-https://pastebin.com/bP8byGHR - 查找评论// here.

在你的分类法上,我不得不删除功能,因为它没有显示在我的菜单上,如果它对你有用,请忽略它,但我看不到它的任何用例。

您的重写是问题所在,您可以使用post_type_link:

add_filter(\'post_type_link\', \'so_update_permalink_structure\', 10, 2);

function so_update_permalink_structure( $post_link, $post )
{
    if ( false !== strpos( $post_link, \'%community_post_domain%\' ) ) {
        $taxonomy_terms = get_the_terms( $post->ID, \'community_post_domain\' );
        foreach ( $taxonomy_terms as $term ) {
            if ( ! $term->parent ) {
                $post_link = str_replace( \'%community_post_domain%\', $term->slug, $post_link );
            }
        }
    }
    return $post_link;
}
别忘了冲洗permalinks并进行测试。

通过快速搜索,我找到了一篇解释得比我好得多的博客文章,它对您的案例很有用:https://react2wp.com/using-same-slug-for-custom-post-type-and-custom-taxonomy/

edit: 我的permalinks测试:


// Created a page with the same slug
// Test url: ok
url.test/community/

// Created the taxonomy \'kubernetes\'
// Test url: ok
url.test/community/kubernetes/

// Created a new cpt post
// Post with a taxonomy: ok
url.test/community/kubernetes/go-micro-services/

// Post without a taxonomy: error 400
// For this case you should set a default taxonomy to prevent an error
url.test/community/%community_post_domain%/go-micro-services/


相关推荐