我正在用qtranslate运行一个wordpress博客。它使用3种语言。
我创建了一个自定义菜单(价目表),使用post_meta-wp挂钩将其保存到数据库中。
我使用简单的逻辑来显示列表项,当我只使用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;
?>
$pricelistline的print_r为:
Array ( [0] => [:en]Rhine Riesling1|0,75 l|9,50 € [1] => [:ge]ჩიხირთმა|100გ|10ლ [2] => [:ru]шоколад|100грамм|10 L )
很明显,我的脚本同时显示了所有三种语言。。。为了解决这个问题,我读了关于qtranslate的文章,发现通过使用_e(),qttranslate可以控制这种情况,显示正确的语言并阻止不需要的语言。
所以修改了代码:
<?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" }
我不知道_e是如何屏蔽其他语言的,但当它发现一个错误语言的单词时,它看起来就像是掉了一样,我建议你执行以下操作之一:
变体1:不使用foreach,而是根据语言为数组使用固定索引
变体2:自己检查数组的第一个字母,看看它是否与正确的语言匹配,如果匹配,则使用旧的echo。
变体3:找到一个函数,它只是告诉你语言是否是你正在寻找的语言,并根据条件反射输出
更新:看起来Variant3的函数可能是__
(我认为这是两个下划线)