【问题标题】:Wordpress “PHP inside of PHP“ – Integrate qTranslate with Meta BoxWordpress “PHP 中的 PHP” – 将 q​​Translate 与 Meta Box 集成
【发布时间】:2016-01-30 10:12:18
【问题描述】:

对于网站 (Wordpress),我想使用知名插件 Meta Box 显示日期,并且该网站应使用英语和德语提供,并使用插件 qTranslate。

德语和英语日期格式不同:德语:dd.mm.y (31.12.16),英语:mm/dd/y (12/31/16)。因此,要根据访问者/为访问者选择的语言显示正确的格式,这两个插件需要协同工作。

这就是我在没有任何语言选项的情况下显示日期的方式:

<?php echo rwmb_meta( 'exhibition_meta_beginning' ); ?>

这就是我在网站上在帖子和页面内容之外显示翻译文本的方式(如网站导航):

<?php _e("[:en]Current[:de]Aktuell[:]"); ?>

我现在的问题是,我如何才能加入这两个功能。如果有帮助,我可以将 Exhibition_meta_beginning 拆分为 Exhibition_meta_beginning_DE 和 Exhibition_meta_beginning_EN,这意味着在创建新实例/帖子时我必须输入每个日期两次,一次是德语格式,一次是英语格式。

我还没有发现任何有用的东西——是的,有人提到过,并且有某种方法可以将自定义字段(这是 Meta Box 的核心基础)与 qTranslate 一起使用,但似乎没有任何效果,我的PHP 知识是最低限度的。

元数据的输入字段是日期(和时间)在一个单独的 PHP 文件中定义,如下所示(标准 Meta Box 过程):

array(
        'name'      => 'Beginn der Ausstellung',
        'id'        => $prefix . 'beginn',
        'type'      => 'date',
        'format'    => 'dd.mm.y'
    ),

在那里将双语性实现到格式值中(当 [:en]... 出现在那里时,它认为它是日期的格式而不是语言标签),也没有类似的东西在哪里显示数据(对于业余尝试感到抱歉):

<?php __("[:en] echo rwmb_meta( 'exhibition_meta_beginn_EN' )[:de]echo rwmb_meta( 'exhibition_meta_beginn_DE' )[:]"); ?>

谢谢!

【问题讨论】:

  • 最后的解决方案是使用date_i18n(查看Wordpress Codex)。使用strtotime(例如yy-mm-dd)可以读取的通用日期格式定义日期字段,并将其用作date_i18n 中的参数。使用date_i18n 两次,一次用于英文格式,一次用于另一种格式,将它们与适当的语言标签作为字符串连接,. 在两者之间进行连接。然后使用_e 回显整个字符串,即在两种解释(两种语言)中使用一个输入字段的内容两次,最终语言环境将选择显示哪一种。精致的解决方案。

标签: php wordpress date meta-boxes qtranslate


【解决方案1】:

你可以这样做,

$en = rwmb_meta( 'exhibition_meta_beginn_EN' );
$de = rwmb_meta( 'exhibition_meta_beginn_DE' );
echo __('[:en]'.$en.'[:de]'.$de.'[:]');

或创建一个基于语言返回值的函数

function __show_based_on_lang($en, $de) {
    return ( qtranxf_getLanguage() == 'en') ? $en : $de ;
}

然后要使用该功能,您可以像这样拥有它,

echo __show_based_on_lang( rwmb_meta( 'exhibition_meta_beginn_EN' ), rwmb_meta( 'exhibition_meta_beginn_DE' ) );

【讨论】:

  • 太棒了。那是有效的。我不想显得贪婪,但您是否也知道如何在不将所有值一分为二的情况下解决问题?
  • 只需将整个语法保存在单个元字段中,然后它将自动转换,您只需回显元框字段值[:en]English[:de]German Value[:]
  • 我现在不在工作,所以我不能再试一次,但如果我理解正确,这就是我尝试并将 qtranslate 语法写入元框字段(类型=日期)导致将 "de" 和 "en" 解释为 PHP 日期语法,因此它返回类似于 'd' 的日期的数字。
  • 我不确定我是否理解正确,但如果您的元字段不是简单的文本输入字段(如复选框或 datapicker),那么您可以直接将文本域翻译集成到其中(假设它支持翻译)
  • 文本域翻译?这意味着什么?什么“它”必须支持翻译?我的意思是,字段中被解释为日期的值(具有指定日期格式的日期选择器)解释整个值并且不排除括号或注释语法中的内容,它只是接受它作为一个字符串,或者,如果指定,作为一个格式符号。因此,它不是“de”,而是将“d”解释为带有前导 0 的日期编号,将“e”解释为使用的时区。或者——如果你的意思是别的——你能给我一个代码示例吗?谢谢!
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2013-06-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多