双语可湿性粉剂网站:如何根据语言实现不同的URL结构规则?

时间:2021-06-13 作者:Atimmy

具有双语设置的wordpress网站,有三种语言:

英语(“初级语言”):"E;“英文”双语设置目前通过polylang插件实现。

我想有不同的URL结构的基础上张贴的语言。

对于英语,

example.com/blog/%category%/%postname%/
以上permalink结构是我当前在WP permalink设置页面中设置的。(自定义结构,/博客/%类别%/%博文名%/)

但对于非英语博客帖子URL,我想使用post id而不是postname:

example.com/zh-hant/blog/%category%/%post_id%
polylang插件不允许我对每种语言有不同的permalink设置,因此我想我需要一个自定义函数解决方案。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

请尝试以下步骤:

添加的重写规则<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 );
}
get_permalink() 以便URL使用正确的结构。

通常,人们会使用post_link 钩住以替换重写标记(%post_id% 在你的情况下),但是%post_id% 是一个核心rewrite/structure tag 在WordPress中,我们可以简单地使用pre_post_link hook 将结构设置为/blog/%category%/%post_id%/ 如果后期语言(slug)是zh-hanszh-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-hanszh-hant. 你可以test it here.

相关推荐