1

我有一个包含 2 种语言的 WP 主页,并使用 Polylang 插件来做到这一点;到目前为止,一切都很好。

现在我安装了一个美国主题,它只提供美国日期格式的博客文章(如“2017 年 9 月 28 日”)。不幸的是,Polylang 只能正确翻译月份名称,但不会更改日期格式。

主题的博客 php 文件使用:

get_the_time('d F, Y')

如果我手动将该格式更改为本地日期格式,它也会将其应用于英文版本,这当然没有意义。相反,我想挂钩到functions.php文件并让 Polylang 通常根据页面的语言更改日期格式。

我为 WPML(另一个 WP 多语言插件)找到了这个片段,它应该可以解决问题:

add_filter( 'option_date_format', function( $format ) {
do_action( 'wpml_register_single_string', 'Date formats', 'Date format', $format );
return apply_filters( 'wpml_translate_single_string', $format, 'Date Formats', 'Date format' );
} );

add_filter( 'option_time_format', function( $format ) {
do_action( 'wpml_register_single_string', 'Date formats', 'Time format', $format );
return apply_filters( 'wpml_translate_single_string', $format, 'Date Formats', 'Time format' );
} );

不幸的是,我无法为 Polylang 做到这一点。我知道要使用的功能是:

pll_register_string( $name, $string, $group, $multiline );

请参阅:https ://polylang.pro/doc/function-reference/#pll_register_string

有人知道该怎么做吗?

4

1 回答 1

3

在 WordPress 默认设置中,您可以设置自己的显示日期格式Settings -> General。然后,您可以在 Polylang 字符串翻译功能Language -> String translations中翻译这种格式。

如果您的主题使用自定义日期格式,这是一种不好的做法,您应该更改它或联系作者进行更改。

而不是get_the_date('d F, Y')应该get_the_date()从设置中返回默认格式的日期。

如果由于某种原因您不使用 WordPress 设置中的日期格式,您应该注册日期格式pll_register_string并将其翻译为Language -> String translations

/**
 * Register polylang strings to translate
 * 
 * @return void
 */
function se_50718114_register_translatable_strings() {

    $date_format = 'd F, Y';

    pll_register_string( $date_format, $date_format );
}

add_action( 'init', 'se_50718114_register_translatable_strings' );

/**
 * Somewhere in your template where you display date
 */
echo get_the_date( pll__( 'd F, Y' ) );

您为 WPML 提供的解决方案在这种情况下将不起作用,因为它会从设置转换日期格式并且您的主题不使用它。

于 2018-06-06T10:37:47.840 回答