Вопрос по wordpress, navigation, qtranslate – Как я могу перевести ССЫЛКИ моего меню навигации с помощью qtranslate на wordpress?

4

У меня есть двуязычный (английский / арабский) WordPress сайт. Мне удалось успешно перевести пункты меню навигации. Тем не менее, меню ссылки на арабском сайте, ссылка на язык по умолчанию, английский.

Как я могу сказать WordPress, что мне нужно изменить ссылки меню на арабском сайте (мне нужно, чтобы ссылки на арабском сайте включали / ar, например: www.talalonline.com/ar вместо www.talalonline.com)

Спасибо

Ваш Ответ

5   ответов
0

В WP есть четыре функции для перевода текста вашего меню с использованием опции по умолчанию или плагина.

Для каждой из четырех функций требуется как минимум один аргумент - текст, который необходимо перевести. Функции:

__() – (two underscores) The basic function that you will use the majority of the time. It returns the text in the correct language.

e() – The same as _() except it echoes the text instead of returning it.

_n() – Used when the text has the potential to be plural, so for example if you were to display how many comments have been made, you might want to output either “X comments,” or “X comment” depending on how many comments you have.

_x() – Useful for when the translation of the word depends on the context. “Post” could mean “a post (noun)” or “to post (verb)” depending on context. It is important for the translator to know which you mean when translating to be accurate. _x() is mainly used where single words are used.

бывший

echo __( 'Menu Text' );
Спасибо за ваш ответ ... однако мне уже удалось перевести мое меню ТЕКСТ .. Что мне нужно перевести, так это меню ССЫЛКИ (то есть, я хотел бы добавить & / ar 'к ссылкам меню ... как можно Я делаю это? maha
10

@maha, я много об этом искал и нашел решениеВот, но ответ немного нечеткий & # x2026;

Поскольку вы не хотите связываться с вашими основными файлами WP, все изменения внесены в тему. Ваша тема находится вwp-content/themes/your-theme-name/

Найдите свою темуfunction.php и добавьте приведенный выше код в конец файла, перед конечным тегом php (?>):

class CustomLinkModifierWalker extends Walker_Nav_Menu {
    function __( $text ) {
        if ( preg_match_all('~(.*?)\|(\w{2,})\|~', $text, $matches) ) {
            $text = '';
            foreach ($matches[1] as $i => $match) {
                $text .= "[:{$matches[2][$i]}]$match";
            }
            $text = __( $text );
        }
        return $text;
    }
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $classes[] = 'menu-item-' . $item->ID;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
        $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';

        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
        $id = $id ? ' id="' . esc_attr( $id ) . '"' : '';

        $output .= $indent . '<li' . $id . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )    ? ' href="' . esc_attr( $this->__( $item->url )  ) .'"' : '';

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}

Затем вы должны найти, где находится ваше меню в вашей теме. Тема, которую я использую, реализует ее вheader.php, Возможно, ваши имена используют другое имя файла, напримерheader-fancy-theme.php.

Мой код представления заголовка был таким:

<?php
$nav_sec_menu_params = array(
    'depth' => 0,
    'theme_location' => 'sec-menu',
    'container_class' => 'menu-topmenu-container',
    'menu_class' => 'menus menu-topmenu',
    'fallback_cb' => 'block_sec_menu'
);
wp_nav_menu($nav_sec_menu_params);
?>

Все, что вам нужно сделать, это добавить реализацию Walker в массив param:

<?php
$nav_sec_menu_params = array(
    'walker' => new CustomLinkModifierWalker(),
    'depth' => 0,
    'theme_location' => 'sec-menu',
    'container_class' => 'menu-topmenu-container',
    'menu_class' => 'menus menu-topmenu',
    'fallback_cb' => 'block_sec_menu'
);
wp_nav_menu($nav_sec_menu_params);
?>

Затем в своем меню вы будете использовать|lang| после языкового URL, вот так:

enter image description here

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

Отлично, у меня сработало!
@Eduardo Часть URL не работает для меня, когда я нажимаю на ссылку, она ведет меня кexample.com|en|http://www.example.com/ar/|ar| вместо языковой части сайта.
@ KamelLabiad, вы внесли изменения в код? Это должен быть разбор "труб" вместо отправки их в HTML.
Это решило мою проблему, большое спасибо!
@EduardoRusso Я только что дополнил идею перевода меню на моем сайте, это добавило больше сложности в URI, контент на моем сайте в основном арабский, но меню на английском, и я думаю, что пользователи по-прежнему могут его использовать. как вы могли видеть это здесьkamellabiad.com, Спасибо.
0

Я также работаю с qTranslate и двуязычным арабским / английским сайтом.

Вы можете иметь свой.htaccess в дальнейшем:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteRule ^ar[\/]?$ index.php?lang=ar
#RewriteRule ^en[\/]?$ index.php?lang=en 
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

И выберите & quot; Использовать режим предварительного пути (по умолчанию, ставит / en / перед URL) & quot; варианты изAdvanced settings раздел вашей страницы настроек плагина qTranslate.

4
 //tested and worked for me.
//use native wordpress filter wp_setup_nav_menu_item

 function qtrans_menuitem( $menu_item ) {

// convert local URLs in custom menu items
   if ($menu_item->type == 'custom' && stripos($menu_item->url, get_site_url()) !== false){
    $menu_item->url = qtrans_convertURL($menu_item->url);
}     
return $menu_item;
 }

 add_filter('wp_setup_nav_menu_item', 'qtrans_menuitem', 0);
@Kamel Labiad вставил его в свой плагин
Работал на меня! большое спасибо
@Kamel, вы можете поместить его в любом месте вашего плагина после & quot; Plugin Header & quot ;. чтобы создать плагин WordPress, пожалуйста, перейдите по этой ссылкеcodex.wordpress.org/Writing_a_Plugin
@ashrafmohammed да какой файл?
Привет, ребята, извините за вопрос новичка, где я должен поместить этот код?
1

fork из qtranslate делает это из коробки:

https://wordpress.org/plugins/qtranslate-x/

в пункте меню в поле «метка навигации» просто предоставьте строки для обоих языков:

[:en]English Text[:de]Deutsch Text

протестировано с темой qTranslate-X 2.7.8, Wordpress 4.1 и Twenty Fifteen 1.0

Похожие вопросы