从分层自定义帖子类型中删除基础子弹

时间:2018-09-19 09:59:22

标签: php wordpress url-rewriting permalinks

干杯

出于SEO的原因,我尝试删除我的自定义等级服务帖子类型(示例名称:“ custom-service”)的基本信息。这些方法称为SEO筒仓。我尝试了不同的方法来获得以下网址结果。

它的外观如何:

https://foo.bar/custom-service/seo-agency/

https://foo.bar/custom-service/seo-agency/seo-workshop/

https://foo.bar/custom-service/foobar-agency/

https://foo.bar/custom-service/foobar-agency/foobar-workshop/

外观如何:

https://foo.bar/seo-agency/

https://foo.bar/seo-agency/seo-workshop/

https://foo.bar/foobar-agency/

https://foo.bar/foobar-agency/foobar-workshop/

我使用以下教程来实现这些结构:

有些人有同样的问题:

起初,我实现了Matthew Boynes的第一个教程的解决方案。除了我的分页以外,一切都正常。如果使用这些解决方案,我的分页将停止工作。 函数add_rewrites()中的以下代码可能会破坏分页:

add_permastruct( 'custom-service', "%custom-service%", array(
    'ep_mask' => EP_PERMALINK
));

您无法调用我的博客页面。以下网址停止工作:

https://foo.bar/blog/page/2
https://foo.bar/cpt/page/2

在第二次尝试中,我删除了Matthew Boynes的代码。存档中没有分页的博客是没有用的。然后,我从“ kellenmace.com”实施了该解决方案。为了使代码适用于分层帖子类型,您必须修改post_type_link的tutorials筛选器功能:

function remove_custom_service_slug( $post_link, $post ) {
    if ( 'custom-service' === $post->post_type && 'publish' === $post->post_status ) {
        if( $post->post_parent ) {
            $parent = get_post($post->post_parent);
            $post_link = str_replace( '/' . $post->post_type . '/' . $parent->post_name . '/', '/', $post_link );
        } else {
            $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'remove_custom_service_slug', 10, 2 );

但是有一个大问题。它将删除基础子弹和父服务子弹:

https://foo.bar/seo-agency/

https://foo.bar/seo-workshop/

有点令人沮丧。也许有人在删除分层帖子类型的基础代码方面有经验,并且对我的项目有很好的提示。


如果您有任何疑问,或者想要进一步的信息或代码,请随时与我联系。

感谢您阅读我的问题!

1 个答案:

答案 0 :(得分:0)

将功能更改为此,以解决所有情况:

尝试此代码,

org.asynchttpclient.netty.channel.DefaultChannelPool