PHP多语言网站使用Qtranslate以正确的顺序显示数组

时间:2012-09-19 15:32:54

标签: php wordpress multilingual qtranslate

我正在使用qtranslate运行wordpress博客。它使用3种语言。

我创建了一个自定义菜单(价目表),使用post_meta wp hooks保存到db。

我使用简单的逻辑来显示列表项,当我只使用1种语言时,它工作得很好。但是现在我添加了qtranslate,我遇到了问题。

让我指导您完成解决过程,以便您更好地了解我遇到的问题!

所以,我有这个代码:

        <?php
            if ( get_post_meta($post->ID, 'price_list_items_category1', true) ) :
                $pricelistline = explode("\n", get_post_meta($post->ID, 'price_list_items_category2', true));

                foreach($pricelistline as $value) {
                    $e = explode("|",$value);
                    echo "<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n";
                }
            endif;
        ?>
$ picelistline的

print_r是:

Array ( [0] => [:en]Rhine Riesling1|0,75 l|9,50 € [1] => [:ge]ჩიხირთმა|100გ|10ლ [2] => [:ru]шоколад|100грамм|10 L )

显然我的脚本同时显示所有三种语言...为了解决这个问题,我读到了qtranslate,并发现通过使用_e()qtranslate将接管情况并显示正确的语言并阻止不需要的语言。 / p>

修改后的代码:

        <?php
            if ( get_post_meta($post->ID, 'price_list_items_category1', true) ) :
                $pricelistline = explode("\n", get_post_meta($post->ID, 'price_list_items_category1', true));

                print_r($pricelistline);
                foreach($pricelistline as $value) {
                    $e = explode("|",$value);
                    _e( "<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n");
                }
            endif;
        ?>

请注意这里的区别:_e( "<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n");

这似乎有效!因为其他语言实例消失了,所以在英文页面上我只看到英文版等。

问题是现在我在查看源代码时发现了一些虚假的HTML。

HTML输出现在看起来像这样:

<ul class="listmenuitems" id="listingmenu_1">
<li><p>Rhine Riesling1 <span>0,75 l</span></p> <span class="listmenuprice">9,50 €
</span><div class="clearfloat"></div><!-- Very Important --></li>
<li><p><li><p>
</ul>

注意:<li><p><li><p>这是剩下两种语言的两个开放元素。我的猜测是,在没有显示的语言的$ e [1]中出现了问题,这就是为什么语言似乎有效!但实际上有一些PHP错误。

我做了tail -f /var/log/apache2/error_log,但我没有看到任何php错误。

那么这里发生了什么?你能帮忙吗?我只需要摆脱额外的HTML元素。对于其他人,我的修改似乎有效!

作为一个长篇文章出来,但我希望我提供了所有细节。

感谢阅读:)

的var_dump

array(3) { [0]=> string(37) "[:en]Rhine Riesling1|0,75 l|9,50 € " [1]=> string(43) "[:ge]ჩიხირთმა|100გ|10ლ " [2]=> string(38) "[:ru]шоколад|100грамм|10 L" }

1 个答案:

答案 0 :(得分:0)

我不知道_e是如何阻止其他语言的,但当它找到一个错误语言的单词时它看起来就像掉线一样,我建议你做一个:

变体1:不要使用foreach,而是根据语言使用固定索引

变体2:自己检查数组的第一个字母,看它是否与正确的语言匹配,如果是,则使用旧的echo。

变式3:找到一个函数,只告诉您该语言是否是您正在查找的语言,并根据该条件回显输出

更新:看起来Variant3的功能可能是__(我认为这是两个下划线)