admin管理员组文章数量:1290956
A wordpress website with bilingual setup, with three languages:
- English ("primary language") : "en"
- Traditional Chinese : "zh-hant"
- Simplified Chinese : "zh-hans"
The bilingual setup is currently achieved with the polylang plugin.
I would like to have different URL structure based on the post's language.
For English,
example/blog/%category%/%postname%/
And the above permalink sturcture is my current set up in the WP permalink setting page. (custom structure, /blog/%category%/%postname%/)
But for non-English blog post URL, I would like to use post id instead of postname:
example/zh-hant/blog/%category%/%post_id%
The polylang plugin does not allow me to have different permalink setting per language, so I think I need a custom function solution to this.
A wordpress website with bilingual setup, with three languages:
- English ("primary language") : "en"
- Traditional Chinese : "zh-hant"
- Simplified Chinese : "zh-hans"
The bilingual setup is currently achieved with the polylang plugin.
I would like to have different URL structure based on the post's language.
For English,
example/blog/%category%/%postname%/
And the above permalink sturcture is my current set up in the WP permalink setting page. (custom structure, /blog/%category%/%postname%/)
But for non-English blog post URL, I would like to use post id instead of postname:
example/zh-hant/blog/%category%/%post_id%
The polylang plugin does not allow me to have different permalink setting per language, so I think I need a custom function solution to this.
Share Improve this question edited Jun 14, 2021 at 9:30 Atimmy asked Jun 13, 2021 at 19:15 AtimmyAtimmy 557 bronze badges 6 | Show 1 more comment1 Answer
Reset to default 1Try the following steps:
Add the rewrite rules for the
<language>/blog/%category%/%post_id%
structure.I used the
post_rewrite_rules
hook to add the rewrite rules, but for generating the rewrite rules, I usedWP_Rewrite::generate_rewrite_rules()
the same way WordPress core used it to generate the rewrite rules for the default permalink structure (that you set via the Permalink Settings page).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/<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 ); }
The above step ensures that the URLs do not result in a 404 error, and now, we need to filter the permalink URL generated via
get_permalink()
so that the URL uses the correct structure.Normally, one would use the
post_link
hook to replace the rewrite tag (%post_id%
in your case), but%post_id%
is a core rewrite/structure tag in WordPress, so we can simply use thepre_post_link
hook to set the structure to/blog/%category%/%post_id%/
if the post language (slug) iszh-hans
orzh-hant
. I.e. We just need to set the structure and the tag will be replaced by WordPress.Note:
pll_get_post_language()
is a Polylang function; see here for further details.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; }
Be sure to flush the rewrite rules after you've added the above functions to your theme/plugin — just visit the Permalink Settings page without having to click on the Save Changes button.
Additionally, the RegEx pattern ^zh-han[st]
will match both zh-hans
and zh-hant
. You can test it here.
本文标签: url rewritingBilingual WP site How to achieve different URL sturcture rule based on its language
版权声明:本文标题:url rewriting - Bilingual WP site: How to achieve different URL sturcture rule based on its language? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741505873a2382317.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
%post_title%
- I think you meant%postname%
? And what is your current permalink structure? Does it have "blog" -blog/%category%/%postname%
- could you please add the structure into your post? – Sally CJ Commented Jun 14, 2021 at 3:50example/blog/zh-hant/
, I believe, should have beenexample/zh-hant/blog/
.. :) Anyway, see my answer. – Sally CJ Commented Jun 14, 2021 at 7:12