只需重写(无需删除)的默认permalink结构(您指定的),即可实现以下permalink结构resources
岗位类型:
/resources/%resources%/resources-type/%resources_type% <- preferred
/resources/resources-type/%resources_type%/%resources% <- default
您可以通过
add_permastruct()
&mdash;首先,注册post类型,但不指定
rewrite
参数,表示重写默认为
true
/已启用,且段塞将
resources
(即post type键或slug):
register_post_type( \'resources\', array(
\'label\' => \'Resources\',
\'public\' => true,
// no need to set the \'rewrite\' arg
...
) );
然后,立即覆盖permalink结构,如下所示:
add_permastruct( \'resources\', \'/resources/%resources%/resources-type/%resources_type%\' );
其中格式为&mdash;重要的部分是
{POST TYPE KEY}
, 你的情况是
resources
:
add_permastruct( \'{POST TYPE KEY}\', \'{PERMALINK STRUCTURE}\' );
(不要忘记刷新重写规则,只需访问永久链接设置页面即可。)
如何禁用/resources/%resources%
/resources/%resources%
(即。
/{POST TYPE KEY}/%{POST TYPE KEY}%
) 在以下情况下自动添加
%{POST TYPE KEY}%
在permalink结构中发现。您可以这样删除它:
add_filter( \'resources_rewrite_rules\', \'filter_resources_rewrite_rules\' );
function filter_resources_rewrite_rules( $rules ) {
$pattern = \'resources/([^/]+)/resources-type/\';
$p_length = strlen( $pattern );
foreach ( $rules as $regex => $query ) {
if ( $pattern !== substr( $regex, 0, $p_length ) ) {
unset( $rules[ $regex ] );
}
}
return $rules;
}
如果帖子类型是分层的,那么
$pattern
可能是
resources/(.+?)/resources-type/
.
如果您想将上述代码/函数用于其他帖子类型,基本上只需将文本“资源”替换为正确的帖子类型键即可。
看见https://developer.wordpress.org/reference/hooks/permastructname_rewrite_rules/ 有关该筛选器的详细信息。