问题描述

我有一个自定义的职位类型的投资组合 (slug 投资组合) 在我的主题,一切正常工作,除了一件事情。当人们创建一个包含投资组合的页面时,例如:example.com/portfolio,该主题认为我想使用自定义帖子类型归档页面,而不是我在编辑器中创建的页面。

我可以以某种方式”reserve” 在保存页面以确保它永远不会被使用时,可以将其重新命名为 portfolio-page?

我的项目使用本教程中概述的方法,这里是我所指的冲突:

“Beyond having to patch the code there is one other catch here in that you can』t call your Page slug the same thing as your custom post type slug. Think of your custom post type slug as a reserved keyword; however, you can make the title of your Page the same name as your custom post type slug just as long as your Page slug is something different.” – http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

感谢任何建议!

最佳解决方案

以下 2 个过滤器允许您在 WordPress 检查 slug 并在 wp-includes /post.php 文件中的功能 wp_unique_post_slug() 中找到。

有 2 个过滤器,一个用于分层职位,一个用于 non-hierarchical 。分层过滤器为帖子父级提供 ID,因此,如果 $ post_parent 为 0,则您知道这是一个”base” 帖子。

如果您想要将特定的帖子类型添加到逻辑中,那么过滤器也会传递 $ post_type 。

通过返回”true”,你告诉 WordPress 这个 s 子是坏的,所以 WordPress 添加一个后缀,就像它会做,如果你试图给我们一个已经采取的邮政名称/s 子。

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。