我正在运行一个带有 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" }