Перевести слаг пользовательского типа записи и таксономии в URL?

Вопрос или проблема

Мне нужна помощь в переводе настраиваемого типа записей и таксономии при использовании мультисайта и мультиязычности.
Я использую подкаталоги /en /sv и т.д.

Использую плагин (Multisite Language Switcher), но не могу изменить настройки перезаписи там. Думаю, мне нужно изменить некоторые перезаписи?
Или мне следует перевести тип записи с помощью файлов переводов, .mo .po?

Вот как настроен тип записи в functions.php.
Должен ли я что-то сделать с перезаписью?

function create_posttype_product() {
    register_post_type( 'product',
        array(
            'labels' => array(
                'name' => __('Products'),
                'singular_name' => __('product'),
                'add_new' => __('Add new product'),
                'add_new_item' => __('New product'),
                'edit_item' => __('Edit product')
            ),
            'public' => true,
            'rewrite' => array( 'slug' => 'product', 'with_front' => false ),

            'has_archive' => 'product',
            'menu_icon'   => 'dashicons-editor-help',
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );
}
add_action( 'init', 'create_posttype_product' );

Так, например, на английской веб-странице URL будет:
www.mypage.com/en/products

Но для шведского я хочу
www.mypage.com/sv/produkter

И для другого языка:
www.mypage.com/xx/product-name-in-this-language

Как я могу достичь этого результата? Я искал и не могу найти правильный ответ.

Во-первых, хотя это и возможно, я полагаю, что это, вероятно, не лучшая практика. Это потому, что семантически и для SEO имеет больше смысла иметь меньшее количество URL.

Это может быть понято так: если ваша страница /en/foo и я хочу переключиться на французский, я могу просто перейти на /fr/foo. Люди могут делать это вручную, и некоторые автоматические инструменты могут понять, что сайт работает так. Если человеку или инструменту также нужно перевести ‘foo’ на французский, чтобы найти правильную страницу, это более сложно и означает, что все должны согласовать переводы, а также коды языков, и переводы не всегда могут быть одинаковыми на 100%.

Я думаю, именно поэтому трудно найти решения для этого при поиске – в общем, принято делать так, чтобы URL оставались максимально похожими и изменялась только языковая часть.

Если вы хотите это сделать и у вас не много языков, один из способов — найти ручные переводы и добавить правила .htaccess для невидимой перезаписи URL с правилами в основном .htaccess, например:

RewriteRule ^/sv/produkter(/.*) /en/product$1 [L]

Это будет легко сделать, если у вас не много слагов или языков для этого.

Также возможно, что плагин PolyLang может это сделать, но вам нужно будет изучить это подробнее. См. пункт 3 здесь: https://polylang.pro/doc/url-modifications/

Чтобы использовать опцию перезаписи, вы должны поместить “product” в переменную. Предупреждение: вы должны оставить то же значение “product” для “register_post_type”.

function create_posttype_product() {

 if  ($language == 'sv') {
      $productSlug = 'produkter';   
 } else {
      $productSlug = 'product';   
 }

register_post_type( 'product',
    array(
        'labels' => array(
            'name' => __('Products'),
            'singular_name' => __('product'),
            'add_new' => __('Add new product'),
            'add_new_item' => __('New product'),
            'edit_item' => __('Edit product')
        ),
        'public' => true,
        'rewrite' => array( 'slug' => $productSlug, 'with_front' => false ),

        'has_archive' => 'product',
        'menu_icon'   => 'dashicons-editor-help',
        'supports' => array('title', 'editor', 'thumbnail')
    )
)}; 
add_action( 'init', 'create_posttype_product' );

Ответ или решение

Перевод настроек пользовательских типов записей и таксономий для URL — это важный шаг при работе с многоязычными сайтами на мультисайтовой архитектуре WordPress. Используя субдиректории (/en, /sv и т.д.), вы уже сделали шаг в направлении локализации сайта. Однако вам необходимо тщательно настроить каждую часть URL, в том числе слэши и теги, чтобы они соответствовали ожиданиям пользователей на разных языках.

Теория: понимание и основы

Когда вы работаете с WordPress, практически каждый элемент вашего сайта может быть переведен или локализован – от контента до пользовательских типов записей и таксономий. Однако реализация этого функционала требует знаний не только в WordPress, но и в области разработки тем и плагинов, а также работы с системой перевода, такой как файлы .mo и .po.

Существуют несколько стратегий, которые можно применить для достижения желаемого результата:

  1. Использование плагинов: Плагины, такие как Multisite Language Switcher, предоставляют основные инструменты для локализации контента, но могут иметь ограниченные возможности для изменения URL.

  2. Переписывание URL: Использованием Rewrite API в WordPress или правил .htaccess вы можете вручную задавать правила для изменения структуры URL в зависимости от языка.

  3. Системные файлы локализации: Создание и использование файлов переводов (.mo и .po) для переноса текстов на разные языки.

Пример: как реализовать

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

function create_posttype_product() {
    $language = get_locale(); // Получаем текущий язык сайта.

    // Устанавливаем slug на основе текущего языка.
    $productSlug = ($language == 'sv_SE') ? 'produkter' : 'product';

    register_post_type( 'product',
        array(
            'labels' => array(
                'name' => __('Products', 'textdomain'),
                'singular_name' => __('Product', 'textdomain'),
                'add_new' => __('Add New Product', 'textdomain'),
                'add_new_item' => __('New Product', 'textdomain'),
                'edit_item' => __('Edit Product', 'textdomain')
            ),
            'public' => true,
            'rewrite' => array( 'slug' => $productSlug, 'with_front' => false ),
            'has_archive' => $productSlug,
            'menu_icon' => 'dashicons-editor-help',
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );
}
add_action( 'init', 'create_posttype_product' );

Применение: как интегрировать и оптимизировать

  1. Мультиязычность с помощью плагинов: Если Multisite Language Switcher вас не устраивает, изучите возможность использования плагина Polylang, который предлагает более гибкие настройки для URL и их перевода.

  2. Настройка .htaccess: Если использование плагинов кажется слишком ограниченным, можно вручную задать набор правил переписывания URL в .htaccess. Процесс может быть сложным и требует тестирования, чтобы исключить ошибки.

  3. Переводы через .mo и .po файлы: При помощи специализированных плагинов или приложений вроде Poedit создайте файлы перевода. Эти файлы должны содержать все текстовые метки на вашем сайте, включая те, что используются в slug и таксономиях.

  4. Тестирование и SEO: Не забудьте протестировать изменения во всех целевых языках. Следует учитывать SEO-аспекты — поисковые системы должны корректно индексировать ваш сайт на всех языках, а пользователи должны иметь удобство навигации.

Перевод слуг в URL требует внимательного подхода и надежной реализации. Каждое изменение должно быть тщательно проверено на влияние на производительность и SEO. Следуя вышеупомянутым шагам, вы сможете более эффективно управлять локализацией вашего WordPress-сайта, обеспечивая лучших пользовательский опыт и более широкий охват аудитории.

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

Капча загружается...