0

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

1 に答える 1

0

_e が他の言語をブロックする方法はわかりませんが、間違った言語の単語を見つけるとドロップするようです。次のいずれかを実行することをお勧めします。

バリエーション 1: foreach を使用せず、言語に応じて配列に固定インデックスを使用する

バリエーション 2: 配列の最初の文字を自分でチェックして、正しい言語と一致するかどうかを確認し、一致する場合は代わりに古いエコーを使用します。

バリアント 3: 言語が探している言語であるかどうかを伝える関数を見つけ、その条件に応じて出力をエコーする

更新: Variant3 の関数のように見えます__(それは 2 つのアンダースコアだと思います)

于 2012-09-19T15:44:27.380 に答える