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 )
明らかに、私のスクリプトは 3 つの言語すべてを同時に表示していました... これを修正するために、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>
これらは、残りの 2 つの言語の 2 つの開始要素です。私の推測では、表示されていない言語の $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" }