请尝试以下步骤:
添加的重写规则<language>/blog/%category%/%post_id%
结构
我用了post_rewrite_rules
hook 为了添加重写规则,但为了生成重写规则,我使用WP_Rewrite::generate_rewrite_rules()
WordPress core使用它为默认的permalink结构(通过permalink设置页面设置)生成重写规则的方式相同。
add_filter( \'post_rewrite_rules\', \'my_post_rewrite_rules\' );
function my_post_rewrite_rules( $post_rewrite ) {
global $wp_rewrite;
// Generate the rewrite rules for example.com/<language>/blog/<category slug or path>/<post ID>/
$post_rewrite2 = $wp_rewrite->generate_rewrite_rules(
\'^zh-han[st]/blog/%category%/%post_id%\',
EP_PERMALINK
);
// Combine the rules, with the new ones at the top.
return array_merge( $post_rewrite2, $post_rewrite );
}
以上步骤确保URL不会导致404错误,现在,我们需要过滤通过
get_permalink()
以便URL使用正确的结构。
通常,人们会使用post_link
钩住以替换重写标记(%post_id%
在你的情况下),但是%post_id%
是一个核心rewrite/structure tag 在WordPress中,我们可以简单地使用pre_post_link
hook 将结构设置为/blog/%category%/%post_id%/
如果后期语言(slug)是zh-hans
或zh-hant
. 一、 我们只需要设置结构,标签将被WordPress替换。
注:pll_get_post_language()
是一个多段函数;看见here 了解更多详细信息。
add_filter( \'pre_post_link\', \'my_pre_post_link\', 10, 3 );
function my_pre_post_link( $permalink, $post, $leavename ) {
if ( ! $leavename && is_object( $post ) &&
preg_match( \'#^zh-han[st]$#\', pll_get_post_language( $post->ID ) )
) {
$permalink = \'/blog/%category%/%post_id%/\';
}
return $permalink;
}
将上述功能添加到主题/插件后,请确保刷新重写规则-只需访问永久链接设置页面,无需单击保存更改按钮。
此外,RegEx模式^zh-han[st]
将两者匹配zh-hans
和zh-hant
. 你可以test it here.