0

我正在运行一个带有 qtranslate 的 wordpress 博客。它使用 3 种语言。

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

我使用简单的逻辑来显示列表项,当我只使用一种语言时它工作得很好。但是现在我添加了 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;
        ?>

$pricelistline 的 print_r 是:

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

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

于是修改了代码:

        <?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" }
4

1 回答 1

0

我不知道 _e 是如何屏蔽其他语言的,但是当它找到错误语言的单词时,它看起来就像是会掉线,我建议您执行以下操作之一:

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

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

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

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

于 2012-09-19T15:44:27.380 回答