Вопрос или проблема
Мне нужна помощь в переводе настраиваемого типа записей и таксономии при использовании мультисайта и мультиязычности.
Я использую подкаталоги /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.
Существуют несколько стратегий, которые можно применить для достижения желаемого результата:
-
Использование плагинов: Плагины, такие как Multisite Language Switcher, предоставляют основные инструменты для локализации контента, но могут иметь ограниченные возможности для изменения URL.
-
Переписывание URL: Использованием Rewrite API в WordPress или правил .htaccess вы можете вручную задавать правила для изменения структуры URL в зависимости от языка.
-
Системные файлы локализации: Создание и использование файлов переводов (.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' );
Применение: как интегрировать и оптимизировать
-
Мультиязычность с помощью плагинов: Если Multisite Language Switcher вас не устраивает, изучите возможность использования плагина Polylang, который предлагает более гибкие настройки для URL и их перевода.
-
Настройка .htaccess: Если использование плагинов кажется слишком ограниченным, можно вручную задать набор правил переписывания URL в .htaccess. Процесс может быть сложным и требует тестирования, чтобы исключить ошибки.
-
Переводы через .mo и .po файлы: При помощи специализированных плагинов или приложений вроде Poedit создайте файлы перевода. Эти файлы должны содержать все текстовые метки на вашем сайте, включая те, что используются в slug и таксономиях.
-
Тестирование и SEO: Не забудьте протестировать изменения во всех целевых языках. Следует учитывать SEO-аспекты — поисковые системы должны корректно индексировать ваш сайт на всех языках, а пользователи должны иметь удобство навигации.
Перевод слуг в URL требует внимательного подхода и надежной реализации. Каждое изменение должно быть тщательно проверено на влияние на производительность и SEO. Следуя вышеупомянутым шагам, вы сможете более эффективно управлять локализацией вашего WordPress-сайта, обеспечивая лучших пользовательский опыт и более широкий охват аудитории.