我正在使用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" }
答案 0 :(得分:0)
我不知道_e是如何阻止其他语言的,但当它找到一个错误语言的单词时它看起来就像掉线一样,我建议你做一个:
变体1:不要使用foreach,而是根据语言使用固定索引
变体2:自己检查数组的第一个字母,看它是否与正确的语言匹配,如果是,则使用旧的echo。
变式3:找到一个函数,只告诉您该语言是否是您正在查找的语言,并根据该条件回显输出
更新:看起来Variant3的功能可能是__
(我认为这是两个下划线)