Как сделать при использовании qtranslate чтобы при переходе на Главную не перебрасывало на язык по-умолчанию. Часть 2

Продолжаем разбираться как создавать многоязычные сайты на wordpress с помощью плагина qtranslate. На данный момент у плагина есть существенный недостаток - во многих темах при переключении языка, например на английский, ссылка на главную страницу все равно ведет на язык по умолчанию. В предыдущих статьях уже рассматривалось как решить эту проблему. Вот ещё два неплохих решения.

Решение 1. Необходимо заменить bloginfo('home'); на qtrans_convertURL(get_bloginfo('home')); в файле functions.php шаблона вашей темы. Ищем строку:

$homeURL = home_url();

И заменяем на:

$homeURL = qtrans_convertURL(get_bloginfo('home'));

Сохраняем изменения! Теперь при переключении языка Вас не будет перебрасывать на язык по-умолчанию.

Решение 2. Если в Вашей теме не используется функция get_option(‘home’) (а это, например, всем известная тема  Twentyten), то поможет следующий рецепт. В файл header.php необходимо добавить код:

add_filter('home_url', 'qtrans_convertURL');

Выглядеть будет примерно так:

 

/**
 * The Header for our theme.
 *
 * Displays all of the section and everything up till
*
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */
 add_filter(‘home_url’, ‘qtrans_convertURL’);
 ?>

Сохраняем изменения!

72 thoughts on “Как сделать при использовании qtranslate чтобы при переходе на Главную не перебрасывало на язык по-умолчанию. Часть 2”

  1. Алексей

    Спасибо за статью!

    Попросили сделать мультиязычный сайт на WordPress, и после краткого обзора плагинов остановился на qTranslate, однако море мелких ошибочек изрядно утомляет…

    1. Editor Post Author

      Автор откровенно подзабросил плагин. Только его подправляет при выходе новой версии WordPress. Остальное — это заплатки создаваемые блоггерами.

      1. Алексей

        Хорошо, что плагин популярен, и эти блоггеры есть. Хотя залезать в исходники не люблю. Создаю всегда дочернюю тему, чтобы «ковырять» её. Здорово, что нашёл Ваш блог. Много дельного по теме.

        Я уже сказал заказчику, что поживём с этим, но когда припрёт, надо будет раскошелиться на wpml.

        1. Editor Post Author

          Честно говоря чистый qtranslate нормально работает. Доработка темы оформления это семечки. А вот прикрутить на блог несовместимые плагины — это уже задача не для начинающих.

          1. Алексей

            А какие несовместимые были у Вас? Мне заказали ещё форум на сайте, установил Mingle. Предвкушаю приключения…

          2. Алексей

            Продолжаю погружаться в тему. У самого WP очень много всего сделано для локализации, а основная заслуга qtranslate — он позволяет менять язык «на лету». То есть, основной объём задач с переводами сводится к расстановке функций типа __() в правильные места кода. Или я не прав?

          3. Editor Post Author

            В целом да. Это будет профессиональная, качественная доработка тем и плагинов под мультиязычность. На элементарном уровне, чтобы обеспечить поддержку 2-3 языков, часто достаточно тегов :en :ru

  2. Иван

    А что если допустим меню выглядит так:

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

  3. Editor Post Author

    Вы здесь приводите уже сгенерированный html? Нужно смотреть header.php (или в том файле который отвечает за это меню)

  4. Иван

    это уже, к сожалению, и есть header.php(скопировал из него), мне приходится дорабатывать функционал после одного дилетанта, каким образом все изменить что-б оставить ту же иерархию я не знаю и боюсь так как сайт уже запущен, может есть какая-то альтернатива или как можно восстановить эту генерацию ссылок? сайт http://your-happy-life.com/

    1. Editor Post Author

      Ну примерно так:
      <ul>
      <li><?php _e("<!--:ru--><a href='http://site.ru/ru/home/' >Главная<!--:--><!--:uk--><a href='http://site.ru/uk/home' >Головна </a><!--:-->"); ?></li>
      <li><?php _e("<!--:ru--><a href='http://site.ru/ru/page1/' >Заявка на поступление </a><!--:--><!--:uk--><a href='http://site.ru/uk/page1' >Заявка на вступ </a><!--:-->"); ?>
      </li>
      </ul>

      Естественно должны быть настроены правильно ссылки в qtranslate

  5. Иван

    хм…то есть вот так? <a title="Главная" href="http://your-happy-life.com/главная" ></a> и если использовать такую запись то значит вилка эта уже не нужна

      1. Иван

        ну об этом я знаю, мне просто только что нормально сообщение ваше отобразилось, если следовать предыдущему посту то запись должна выглядеть так ? но если так тогда появляются два меню на двух языках сразу, ссылки настроены верно, возможно что-то не так написал <?php _e("ГлавнаяHome«);?>

        1. Editor Post Author

          Я понял. Просто код на блоге нормально не отображается. Написал на почту

          1. Editor Post Author

            Здравствуйте. А в чём конкретно проблема? У Ивана просто header.php был правленный. Если у Вас обычная тема для WordPress, то просто воспользуйтесь советом выше.

  6. Иван

    все, есть контакт, все получилось, наконец-то я врубился! УРААААА! Огромнейшее вам спасибо за то что помогли и не отступили! я добавляю в избранное ваш сайт…удачи вам и счастья в жизни!

  7. Сергей

    Здравствуйте! У меня проблема с переходом через логотип на главную страницу, сделал так как вы сказали, добавил qtrans_convertURL(get_bloginfo(‘home’)); вроде все нормально, навожу на логотип, ссылка выглядит так http://site.ru/?lang=en/
    тоесть с лишней «/» в конце и поэтому перебрасывает на язык по умолчанию, а нужно так http://site.ru/?lang=en …как эту черту убрать незнаю, пробовал залезать в ядро, но понял что изменять там лучше ничего не надо…может знаете в чем проблема?

    1. Editor Post Author

      Давно как-то попадалась тема с логотипом. Уже не помню точно как решил. Какая тема установлена?

  8. Сергей

    Тема Jarida от ThemeForest, проблема решена) в этой ссылке <a title="» href=»»> в конце был лишний слеш, удалил и все заработало! Спасибо за оперативность ответа и за полезный пост!) Кстати, вы не знаете премиум темы как-то влияют на поисковых роботов, они не понижают мой сайт в рейтинге только потому что тема используется ещё кем-то?

    1. Editor Post Author

      Согласно тому что пишут в сети — использование неуникальных шаблонов понижает рейтинг. Но я думаю что уникализация шаблона это уже «вылизывание» сайта. Всё решает уникальность и релевантность контента. И ссылки конечно.

  9. Юрий

    Добрый день, подскажите пожалуйста в следующем вопросе. Сделал с помощью qtranslate двуязычный сайт. Вывел с помощью конструкции переключение языков, основной русский, ссылки на английскую версию имеют вид sitename.com/en, в шаблоне там где нужно получить ссылку на главную использую и все отлично работает — при переключении языка ко всем ссылкам дописывается /en. Меню формирую через админку, на главную ссылка в меню создается через произвольные ссылки в виде прямой ссылки на сайт, для замены ссылки на главную страницу англ. версии создал второе меню, где повторил все пункты добавив в произвольной ссылке /en, какое меню выводится зависит от выбранного языка (проверяется локаль сайта и выводится либо рус. меню либо англ.). Но при такой конструкции почему то при переходе на англ. язык, пункту главной страницы не присваивается класс «current-menu-item» и пункт меню главной страницы не выделяется когда активный. Если дописать add_filter('home_url', 'qtrans_convertURL');
    как указано в Вашей статье, то класс присваивается, но все ссылки в шаблоне которые выводились через имеют вид sitename.com/en/en В чем может быть проблема? Единственным способом пока вижу формирование пунктов меню вручную прямо в шаблоне.

    1. Editor Post Author

      Думаю что где-то лишняя косая черта. Например в шаблоне должно быть sitename.com, а не sitename.com/.

  10. Юрий

    Здравствуйте! Почему то не прописался код который я указывал в предыдущем комментарии. В шаблоне нигде не указывается ссылка на прямую, везде выводится с помощью bloginfo(‘url’), так что проблема не с косой чертой к сожалению. Я так понял, что указывать add_filter(‘home_url’, ‘qtrans_convertURL’); в файле шаблона надо, чтобы добавлять к ссылке идентификатор выбранного языка. Но вот что интересно, я использую qtranslate 2.5.35 и у меня без добавления этой строки bloginfo(‘url’) сам преобразовывается и добавляет /en к имени, и если я еще указываю строку add_filter(‘home_url’, ‘qtrans_convertURL’); то происходит двойное добавление /en/en. Получается чтобы вывести англоязычное меню мне нужно его вручную вписывать в шаблоне в таком виде: <li ><a href="»>Главная иначе при указании пункта главной страницы из админки в виде http://sitename.com/en при переключении языка не проходит проверку на home_url и движок не добавляет класс текущей страницы…

    1. Editor Post Author

      Я так понимаю, что у Вас до вставки add_filter(‘home_url’, ‘qtrans_convertURL’); всё отлично работало, но при переходе на главную просходил сброс на дефолтный язык.
      Тогда могу предложить вариант просто удалить главную из навигации. Создать в админке статическую страницу с названием Главная (Home) и назначить её главной. Мы тут в комментариях уже где-то это обсуждали. Я вот тут немного про это писал http://z-force.info/wordpress/kak-sdelat-pri-ispolzovanii-qtranslate-chtoby-pri-perexode-na-glavnuyu-ne-perebrasyvalo-na-yazyk-po-umolchaniyu/ Но главную можно удалить и через Админку — погуглите

  11. Юрий

    Спасибо за помощь. Да действительно до вставки add_filter(‘home_url’, ‘qtrans_convertURL’); все отлично. Дело в том, что на главной обязательно должна быть не статическая страница, а последние записи поэтому сделал так — в шаблоне меню вывожу если срабатывает условие if(get_locale() == ‘ru_RU’ через wp_nav_menu(array(‘theme_location’ =>’name_menu’)); а если не срабатывает (выбран другой язык) пишу вручную пункты с проверкой на главную и текущую страницу и присвоением класса CSS if(is_home()) { echo ‘ class=»current-menu-item» ‘; } это для главной или if (is_page(‘номер ид страницы’)) echo ‘ class=»current-menu-item»‘; для текущей страницы привязанной к пункту меню. Вдруг кому-нибудь пригодится.

    1. Editor Post Author

      Я бы просто на статической Главной через плагин вывел бы последние записи. Или через php. Уже кстати так и делал на одном сайте. Но за информацию спасибо, конечно.

    2. Марианна

      Подробнее как это сделать? У меня пробелема в том, что в русском варианте меню работает адекватно, в украинском подпункты залазят за пределы экрана. Так как что-то не срабатывает.

  12. Сергей

    здравствуйте, а что если при переходе по поиску на сайте перебрасывается на язык по умолчанию? а все остальное работает нормально

    1. Editor Post Author

      Здравствуйте. Не было такого. Поставьте пользовательский поиск от Гугла. Вот можете посмотреть как работает на данном блоге

  13. Aik

    Не могу что то с главной разобраться. Тема не стандартная. Нужное меню пачкой файлов формируется в папке меню. Но там переменной home нет в обще.
    Переменная хоум есть в каком то общем файле как я понял. И указание идет на индекс пхп. С моими знаниями я ни чего не придумал кроме как по впихивать последнюю строку из статьи в разные места) не помогло.

    1. Editor Post Author

      Есть вариант решения такой проблемы. Создать страницу с названием «Главная». Создать пользовательское меню и поставить новую страницу с названием «Главная» первой по счёту.

  14. Aik

    Короче опа полная. Там блин в теме главная еще паре мест маячит, в самом коде через переменные. Одно вылечим, другое прибьем. Адд фильтр помог частично, ну кроме меню основного.

    В самом коде, судя по комментариям, есть поддержка wpml. Но цена для моего маленького проектика не оправдывающего хостинг нереальная.

    1. Editor Post Author

      Ну я же расписал в комментарии выше что делать. Погуглите «как скрыть главную страницу вордпресс» если не понимаете, что я Вам советую.

  15. Aik

    Предлагаете пару тройку «главных» сделать?) В теме несколько способов попасть на неё, тот же логотип через хоум, и еще что то. Но по логотипу все норм. Меню то оно без проблем настроится через страницу. По вашему это нормально в целом будет то что несколько страниц одинаковыми будут?

  16. Aik

    Спасиб, а плагин для вывода последних записей какой используете? Наугад пару попробовал, так ужасно выглядят.

    1. Editor Post Author

      В визуальный редактор? 🙂 🙂 Поставьте плагин «PHP Code for posts» и будет Вам счастье…

  17. Aik

    Спасиб, все заработало. Но так страшненько выглядит. Пожалуй поищу какое нибудь другое решение.

    1. Editor Post Author

      Чтобы не было страшненько надо CSS применять. Если уж взялись за многоязычность придётся во всё вникать

  18. Aik

    Там не в CSS дело. Страниц нет, вместо нормальных картинок миниатюры, еще что то не так. Остановился на плагине blog in blog. Для нубиков вроде меня это самое то, задать шорт код, чутка циферки поменять и все)

  19. Aik

    нет.. я рано радовался, этот дурацкий плагин сбрасывает язык при переходах на следующие страницы)

  20. Андрей

    Здравствуйте!
    Очень нужна помощь!
    Делаю сайт магазин. Очень помог Ваш совет выше с главной страницей все поправилось — спасибо!
    Trouble: поставил виджет WooCommerce Cart Tab. При нажатии на переход в корзину или оплату — переходит на страницу с языком по умолчанию и весь сайт на языке по умолчанию становится. В коде этот виджет при любом выбранном языке содержит ссылку на страницу с языком по умолчанию.
    Что делать?

    1. Editor Post Author

      Здравствуйте. Часто такое бывает, что плагины несовместимы с qtranslate. Я знаю решение только тех проблем, с которыми сталкивался сам. С WooCommerce Cart Tab не сталкивался, а потому решения не знаю. Это кропотливая работа по анализу и доработке кода плагина.
      Кстати это не Вы на qTranslate Forum создали тему с похожим вопросом?

  21. Андрей

    Да, это я тему создал, только и там мне пока ничего не ответили.
    Ну, и на этом спасибо.
    Может быть я сам сделаю…

  22. Андрей

    ЧПУ поставлен.
    Я примерно воюю с вот этой надписью:
    add_filter( ‘get_cart_url’, ‘get_cart_total’, ‘get_cart_contents_count’, ‘qtrans_convertURL’);
    этот стих я сочинил сам.
    В плагине есть такая строчка:
    <a href="cart->get_cart_url(); ?>» title=»» class=»cart-parent «>

    cart->get_cart_total();

    echo » . sprintf( _n( ‘%d item’, ‘%d items’, $woocommerce->cart->get_cart_contents_count(), ‘woocommerce-cart-tab’ ), $woocommerce->cart->get_cart_contents_count() ) . »;
    Дает она следующее:
    на виджете надпись Корзина меняется на выбранный язык и больше ничего. Все остальное — названия выбранных товаров, кнопки «Просмотр корзины» и «Оплата», остается на языке по умолчанию. При наведении на эти кнопки и на товар в виджете корзины, показывает на страницы с языком по умолчанию. Хотя весь сайт на выбранном другом языке.
    Вот пример кода:




    1. Editor Post Author

      WordPress код скушал, но я понял, что моих знаний недостаточно. Может форум поможет, но там спецов не так уж много.

  23. Sergei

    здравствуйте, подскажите пожалуйста как все это сделать правильно?сделал все так же как и расписанно, не помогает, все та же проблемма с преходом с английской версии на главную она становится языком по умолчанию, заранее спасибо!

  24. Михаил

    Здравствуйте. Помогите, пожалуйста. Решил создать мультиязычный сайт, на сайте присутствует плагин интернет-магазина woocommerce. При активном иностранном языке при переходе на страницу магазина, выбрасывает на русский язык. Однако, если на странице магазина нажать иностранный язык, все переведется. Страница в списке страниц в консоли сайта числится многоязычной. С другими страницами такой проблемы нет, только с со страницей магазина woocommerce. Со страницей корзины тоже проблем нет.

    1. Editor Post Author

      Здравствуйте. К сожалению с woocommerce не работал. Это надо «ковырять» код темы, а возможно плагина.

  25. Сергей

    Здравствуйте! Прочитал пост и комментарии, но ввиду слабых знаний в области php и css почти ничего не понял. Согласитесь ли Вы (на платной основе) проконсультировать меня с этим непростым плагином?

  26. Dmitry

    Есть два вопроса, на которые не могу найти ответы:

    1) После вставки add_filter(‘home_url’, ‘qtrans_convertURL’); перестали работать ссылки на страницы внутри сайта, т.е. дальше главной не уйти.

    2) Для того чтобы, менялся логотип на сайте при смене языка, я вставил код:

    <?php echo is_front_page() ? '' : ''; ?>
    <a href="">

    <?php echo is_front_page() ? '' : ''; ?>



    Логотип меняется, но только если полностью обновить страницу, в противном случае он остается неизменным. Что делать?((

    1. Editor Post Author

      Здравствуйте. Вероятно Вы используете обновлённую версию плагина, который теперь называется qTranslate-X (есть ещё модификации). Если у Вас именно qTranslate-X, то нужно чуть модифицировать функции Нужно использовать qtranxf вместо qtrans. Т.е. add_filter(‘home_url’, ‘qtranxf_convertURL’);

  27. Rere

    Спасибо, очень интересная статья. У меня Theme My Login и Qtranslate и при редактировании профиля пользователя также перебрасывает на язык по-умолчанию. Как можно решить эту проблему?

    1. Editor Post Author

      Честно говоря уже давно не занимался многоязычностью. Для простоты делаете пользовательское меню и там вручную ставите главную страницу.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>