在WordPress区块主题中加载语言特定模板部件的方法
在WordPress区块主题中加载语言特定模板部件的方法
嘿,我来给你唠唠怎么在区块主题里实现按语言加载不同的模板部件~ 刚好你用的是404页面的场景,咱就对着这个例子说清楚。
咱先看最靠谱的方案——用WordPress的钩子来动态修改模板部件的slug,不用改太多模板文件,灵活性还高:
- 打开你区块主题的
functions.php文件,把下面这段代码加进去:
add_filter( 'block_core_template_part_render', 'load_language_specific_template_part', 10, 3 ); function load_language_specific_template_part( $content, $block, $instance ) { // 只针对咱们的404-message模板部件生效,别影响其他部件 if ( $block['attrs']['slug'] !== '404-message' ) { return $content; } // 获取当前站点的语言标识,原生WordPress用get_locale()会返回fr_FR、en_US这种格式 $current_locale = get_locale(); // 如果你用的是Polylang这类多语言插件,也可以用pll_current_language('slug')直接拿到fr、en这种短代码,更方便 // $current_lang = pll_current_language('slug'); // 拼接出语言专属的模板部件slug $lang_specific_slug = '404-message-' . substr( $current_locale, 0, 2 ); // 取locale前两位,比如fr_FR就取fr // 先检查这个语言专属的模板部件文件是否存在 $template_part_path = locate_template( "parts/{$lang_specific_slug}.php" ); if ( file_exists( $template_part_path ) ) { // 存在的话就替换成新的slug,重新渲染模板部件 $block['attrs']['slug'] = $lang_specific_slug; $content = render_block( $block ); } // 要是找不到语言专属的文件,就返回原来的默认模板部件,不会出错 return $content; }
- 别忘了提前创建好对应的模板部件文件哦!比如在主题的
parts文件夹里,要准备404-message-fr.php、404-message-en.php,还有默认的404-message.php当回退。
如果你不想用钩子,也可以直接修改404模板文件:
把主题里的404.html改成404.php(因为要写PHP代码),然后把原来的模板部件区块替换成下面这段PHP代码:
<?php $current_locale = get_locale(); $lang_specific_slug = '404-message-' . substr( $current_locale, 0, 2 ); // 检查语言专属模板部件是否存在 if ( locate_template( "parts/{$lang_specific_slug}.php" ) ) { echo '<!-- wp:template-part {"slug":"' . esc_attr( $lang_specific_slug ) . '"} /-->'; } else { // 不存在就用默认的 echo '<!-- wp:template-part {"slug":"404-message"} /-->'; } ?>
这样当用户访问404页面时,WordPress会自动根据当前语言加载对应的模板部件,完美解决你的需求~
内容来源于stack exchange
相关产品推荐
相关产品推荐

