如何解决WooCommerce产品排序‘Sort by’及分页文本无法翻译的问题?
解决WooCommerce + Avada主题中“Sort by”及分页文本无法翻译的问题
问题原因
你之前的方法失效,核心原因是:
- “Sort by”文本大概率是Avada主题自身输出的,而非WooCommerce核心内容,所以需要针对Avada的文本域(
avada)处理,而非默认的WooCommerce域。 - 分页的产品数量文本同理,可能由Avada或WooCommerce输出,但需要匹配准确的原始文本格式(比如带占位符的复数文本)。
解决方案
方案1:通过文本过滤器精准替换(推荐)
将以下代码添加到Avada子主题的functions.php中(不要直接修改父主题,避免主题更新丢失):
// 翻译单文本(如Sort by) function custom_avada_woocommerce_translations( $translated_text, $text, $domain ) { // 处理Avada主题的文本 if ( 'avada' === $domain ) { switch( $text ) { case 'Sort by': $translated_text = 'Řadit dle'; break; case 'Sort by:': // 部分主题版本可能带冒号,按需启用 $translated_text = 'Řadit dle:'; break; } } // 处理WooCommerce的分页结果文本 if ( 'woocommerce' === $domain ) { // 匹配"Showing %1$s–%2$s of %3$s results"格式 if ( $text === 'Showing %1$s–%2$s of %3$s results' ) { $translated_text = sprintf( 'Zobrazuji %1$s–%2$s z %3$s výsledků', '%1$s', '%2$s', '%3$s' ); } // 匹配单结果文本"Showing 1 result" if ( $text === 'Showing 1 result' ) { $translated_text = 'Zobrazuji 1 výsledek'; } } return $translated_text; } add_filter( 'gettext', 'custom_avada_woocommerce_translations', 20, 3 ); // 翻译复数文本(如分页的多结果) function custom_avada_woocommerce_plural_translations( $translated_text, $single, $plural, $count, $domain ) { if ( 'woocommerce' === $domain ) { if ( $single === 'Showing 1 result' && $plural === 'Showing %d results' ) { $translated_text = $count === 1 ? 'Zobrazuji 1 výsledek' : sprintf( 'Zobrazuji %d výsledků', $count ); } } return $translated_text; } add_filter( 'ngettext', 'custom_avada_woocommerce_plural_translations', 20, 5 );
方案2:直接修改模板文件(更直观)
Avada主题允许通过子主题覆盖WooCommerce模板:
- 在Avada子主题中创建目录
woocommerce/loop/ - 复制父主题
wp-content/themes/Avada/woocommerce/loop/orderby.php到子主题对应目录 - 打开子主题的
orderby.php,找到包含“Sort by”的代码行,替换为你的本地语言(比如<span class="fusion-sort-by-label"><?php esc_html_e( 'Řadit dle', 'avada' ); ?></span>) - 同理,复制
wp-content/themes/Avada/woocommerce/loop/result-count.php到子主题,修改分页结果文本。
为什么之前的方法无效?
- 方法1的gettext过滤器未指定Avada的文本域(
avada),且匹配的“Sort by ”带空格可能与主题实际输出的文本不符。 - 方法2的
woocommerce_catalog_orderby仅修改排序下拉选项的文本,不影响前面的“Sort by”标签。
内容的提问来源于stack exchange,提问作者pechyno
相关产品推荐
相关产品推荐

