나는 qtranslate가있는 WordPress 블로그를 운영 중입니다. 그것은 3 개의 언어를 사용하고 있습니다.Qtranslate로 올바른 순서로 배열을 표시하는 PHP 다국어 사이트
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;
?>
인 print_r은 $ pricelistline 위해이었다 :
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" }
if (qtrans_getLanguage() == 'en') {}하지만이 코드를 내 코드와 통합하는 방법을 이해하는 데 어려움을 겪고 있거나 사용할 논리를 알고 싶습니다. . –
언어가 언어에 관계없이 동일한 색인으로 저장된다면 foreach를 제거하고 $ e의 정의를'$ e = explode ("|", $ pricelist [index_for_current_language]);로 수정하면됩니다. 그렇지 않으면 foreach와 그것의 안쪽에 그리고 원래의 반향이있는 경우 – xception
$ pricelistline 배열을 가져 와서 foreach에 도달하기 전에 필터링하면 어떻게 될까요? if 함수 (if == en)를 사용하면 [: en]으로 시작하는 항목 이외의 다른 항목은 모두 제거됩니다. 그래서이 될 것 내가 –