qTranslate-X вывод статьи в другом языке

3 комментария

Допустим установлен у вас плагин qTranslate-X. Допустим есть два языка: русский и английский. К примеру вам нужно вывести и русский и английский заголовок статьи на русскоязычной версии сайта. Сходу это сделать не получится, т.к. этот плагин автоматически переводит всю статью на текущий язык.

Делается это так:

$postId = get_the_ID();

wp_cache_delete($postId, 'posts');
$mypost = WP_Post::get_instance($postId);

$titleEn = qtrans_use('en', $mypost->post_title, false);

$titleEn — будет содержать заголовок на английском. В общем вот и все. Подробнее почему именно так, смотрите далее.

Конструкция $mypost = WP_Post::get_instance($postId); получает из базы запись в виде объекта в непреобразованном виде. Т.е. со стандартными тегами <!--:en--> и <!--:ru-->. Что дает возможность получать любой перевод в независимости от текущего языка.

Если же мы работаем с текущей статей, то ядро WordPress-а кеширует эту статью, до того как начнется вывод в шаблон. Но до попадания в кеш эта статья успевает обработаться плагином qTranslate-X. И в итоге в кеш попадает уже переведенный объект статьи. Поэтому кеш мы сначала сбрасываем wp_cache_delete($postId, 'posts'); а уже потом получаем саму запись $mypost = WP_Post::get_instance($postId);.

А уж после, мы можем перевести либо часть объекта, либо весь объект в любой нужный нам язык:

$titleEn = qtrans_use('en', $mypost->post_title, false);
$titleRu = qtrans_use('ru', $mypost->post_title, false);
//или весь объект сразу вот так:
$mypost = qtrans_use('en', $mypost, false);
  1. Татьяна

    Спасибо большое за статью, было хорошо, но мало :-) нельзя ли подробнее узнать какие настройки вообще изначально вносить в этот плагин после установки и активации? спасибо ещё раз

    1. Дмитрий Амиров Автор

      Да я уже не помню точно. Вроде как там все интуитивно понятно. Настраиваешь список языков — и в общем то все :)

Добавить комментарий

Прочли запись? Понравилась? Не стесняйтесь, оставьте, пожалуйста, свой комментарий. Мне очень интересно, что вы думаете об этом. Кстати в комментарии вы можете задать мне любой вопрос. Я обязательно отвечу.

Вы можете оставить коментарий анонимно, для этого можно не указывать Имя и email. Все комментарии проходят модерацию, поэтому ваш комментарий появится не сразу.