有一个WordPress页面与自定义帖子类型"前"slug具有相同的标题

Han*_*com 15 php wordpress permalinks custom-post-type custom-taxonomy

我有一个自定义的帖子类型djs和一个city有两个术语的自定义分类:bostonnyc.所以DJ可以被标记为波士顿或纽约.

DJ型材(单djs柱)位于/nyc-wedding-dj/joe-shmoe/,例如,或用于波士顿DJ, /boston-wedding-dj/jane-doe/.换句话说,该自定义帖子类型的重写slug设置为%city%-wedding-dj.

我有两个常规页面/boston-wedding-djs//nyc-wedding-djs/(注意带有s的多个DJ),我使用自定义页面模板来循环来自相应城市的DJ,并显示从该页面的城市到DJ个人档案的链接列表.

我想做的是让重写slug成为%city%-wedding-djs自定义帖子类型单页"出现"(至少谷歌)作为上述那些页面的子页面.

有一个冲突然而,当我更改自定义后类型重写塞djs%city%-wedding-djs,我得到的网页404 Not Found错误/boston-wedding-djs//nyc-wedding-djs/.

我怎样才能有一个与页面同名的重写slug?

bir*_*ire 10

这让我想起了一个伟大的博客帖子上有些相关学科马修Boynes.

建议使用独特的底座,以避免您描述的冲突.

如果您必须这样做并且正在寻找WordPress中的解决方法,那么可以在request- 或parse_request过滤器的帮助下调整它解析传入请求的方式.

示例:

这会检查%city%-wedding-djs页面是否存在,因此如果您以后添加更多城市,则无需更新代码段:

! is_admin() && add_filter( 'request', function( $query_vars )  
{
    if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) )  
    {
        $slug = $query_vars['city'] . '-wedding-djs';

        // Override if the %city%-wedding-djs page exists
        if ( get_page_by_path( $slug ) )
            $query_vars['pagename'] = $slug;
    }
    return $query_vars;
} );
Run Code Online (Sandbox Code Playgroud)

或者如果你只得到了bostonnyc为城市和你没有需要检查,如果相应的页面存在:

! is_admin() && add_filter( 'request', function( $query_vars )  
{
    if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) )  
    {
        $city = $query_vars['city'];
        if ( in_array( $city, array( 'boston', 'nyc' ) ) )
            $query_vars['pagename'] = $city . '-wedding-djs';
    }
    return $query_vars;
} );
Run Code Online (Sandbox Code Playgroud)

这意味着请求:

example.tld/nyc-wedding-djs/
Run Code Online (Sandbox Code Playgroud)

现在被视为一个page,和

example.tld/nyc-wedding-djs/joe-smhoe/
Run Code Online (Sandbox Code Playgroud)

作为一个djs帖子.

这里我们假设page重写规则的优先级低于djspost类型.


tre*_*005 7

如果您使用的是htaccess,则可以手动设置这些页面的重定向,然后应该正确解析.添加以下行:

RewriteCond %{REQUEST_URI} ^/boston-wedding-djs/$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/boston-wedding-djs$ [NC]
RewriteRule . index\.php?pagename=boston-wedding-djs [NC,L]
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs/$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs$ [NC]
RewriteRule . index\.php?pagename=nyc-wedding-djs [NC,L]
Run Code Online (Sandbox Code Playgroud)

RewriteRule ^index\.php$ - [L]

您也可以使用WordPress add_rewrite_rule执行此操作,但它似乎已经混淆了所以它似乎不太可能工作.


小智 7

你不能有一个帖子和一个页面相同的slug.

你需要删除你的页面并创建一个模板页面,archive-djs.php也许是一个single-djs.php,它会动态显示该页面.

有关模板层次结构,请参阅此页面