【发布时间】:2020-01-05 23:53:12
【问题描述】:
我有一个名为 campaign 的自定义分类和一个名为 asset 的自定义帖子类型。对于资产,我希望具有以下永久链接结构:mysite.com/<campaign_name>/<asset_name>。我已经通过以下代码实现了这一点,但是现在如果我转到任何具有 url 结构 mysite.com/<pagename> 的普通页面,它会给出 404。当我注释掉用于注册自定义帖子类型的函数中的 rewrite slug 部分时,或者改为添加 ams/%campaign%,它可以工作,但这不是我想要的自定义帖子类型的 URL 结构。
自定义分类注册代码:
...
'rewrite' => array(
'slug' => '',
'with_front' => true,
),
...
自定义帖子类型注册代码:
...
rewrite' => array(
'slug' => '%campaign%',
'with_front' => true,
),
...
重写规则的功能:
function ams_asset_add_rewrite_rules( $rules ) {
global $post;
if ($post->post_type == 'asset' ) {
$new = array();
$new['([^/]+)/(.+)/?$'] = 'index.php?asset=$matches[2]';
$new['(.+)/?$'] = 'index.php?campaign=$matches[1]';
return array_merge( $new, $rules );
}
return $rules;
}
add_filter( 'rewrite_rules_array', 'ams_asset_add_rewrite_rules' );
// Handle the '%campaign%' URL placeholder
function ams_asset_filter_post_type_link( $link, $post = 0 ) {
if ( $post->post_type == 'asset' ) {
$cats = wp_get_object_terms( $post->ID, 'campaign' );
if ( $cats ) {
$link = str_replace( '%campaign%', $cats[0]->slug, $link );
}
}
return $link;
}
add_filter( 'post_type_link', 'ams_asset_filter_post_type_link', 10, 2 );
【问题讨论】:
标签: wordpress url-rewriting custom-post-type custom-taxonomy