当前位置: 首页>>技术解读>>正文


自定义帖子类型弹头/页面弹片冲突 – 防止在页面保存时使用保留的弹丸?

webfans 技术解读 , , , 去评论

问题描述

我的主题中有一个自定义帖子类型的投资组合(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文件的function wp_unique_post_slug()中找到。

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

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

通过返回”true”,你告诉WordPress这个slug是坏的,所以WordPress添加一个后缀,就像你试图给我们一个已经采取的帖子名称/slug一样。

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;
}

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2412.html,转载请务必附带本地址声明。