Вопрос или проблема
Мне нужно разработать многоязычный веб-сайт для нескольких стран. В одной стране может быть несколько языков. Я настроил сеть WordPress и создал подсайты для каждой страны, как показано ниже.
abc.com/ > Глобальный веб-сайт
abc.com/usa > Веб-сайт США
abc.com/fra > Веб-сайт Франции
Я определяю страны через API геолокации и принудительно перенаправляю их на веб-сайт их страны. У каждой страны есть свой набор языков, например, во Франции будут английский и французский, причем французский – это язык по умолчанию. Я решил использовать PolyLang для языковых переводов. Это работает отлично.
abc.com/fra/ > веб-сайт по умолчанию на французском
abc.com/fra/en > английский перевод французского веб-сайта.
Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть дублирующийся английский контент на каждом подсайте. Есть ли способ избежать дубликатов и чтобы английская версия подсайтов использовала английские страницы/посты с глобального сайта? В идеале администратор должен иметь возможность выбрать, какой пост идет на подсайт, а какой нет.
Также есть раздел событий, который может содержать как глобальные события, так и местные/национальные события.
Я могу подумать о следующих решениях и их недостатках
-
Плагин ThreeWP Broadcast. Этот плагин транслирует страницы/посты на другие сайты по выбору. Кажется отличным вариантом, но он дублирует контент, чего я стараюсь избежать. Более того, я не уверен, как это будет работать с переводами PolyLang.
-
Добавление действия ‘template_redirect’ или ‘wp’, если подсайт не может найти слаг, а тот же слаг доступен на глобальном сайте, он должен быть заполнен и избежать 404. Нам также нужно перехватить или переопределить вызовы WP_Query, чтобы выполнить тот же запрос на глобальном сайте и вернуть результаты. Что касается PolyLang, я не уверен, как это будет работать. Думаю, это можно будет решить. Этот подход сложный и может не привести ни к чему.
У кого-то есть лучшее решение? Плагин или идея, которые могут решить эту интересную загадку?
Я верю, что это обычная ситуация для многонациональной компании. Поэтому должно быть жизнеспособное решение для этого.
R, простое решение – создать 2 мета-поста.
Первый – “Blog id”
Второй – “Post id”
и вы используете
$blog_id = get_post_custom_values('blog_id');
$post_id = get_post_custom_values('post_id');
if( !empty( $blog_id ) )
switch_to_blog( $blog_id );
$query = new WP_Query( array( 'p' => $post_id ));
if( $query->have_posts() ){
while( $query->have_post() ){
$query->the_post();
}
}
restore_current_blog();
ссылка:
Ответ или решение
Вопрос создания многоязычного веб-сайта в рамках сети WordPress, особенно с использованием наследования постов и страниц для подсайтов, стал актуальным для многих компаний, работающих на международном уровне. Поскольку вы уже создали сетевую структуру с помощью WordPress, давайте рассмотрим оптимальные решения для управления контентом и избежания дублирования английских страниц на разных субсайтах.
Проблема
У вас есть глобальный сайт и несколько подсайтов для каждой страны, при этом для каждого subsite реализована локализация контента через плагин Polylang. Проблема заключается в том, что на каждом подсайте существует дублирующийся English контент, что может привести к избыточности данных и потенциальным трудностям в управлении.
Решение
-
Использование метаданных постов:
Предложенный вами подход с использованием метаданных постов является хорошей начальной точкой. Создание двух метаполей:blog_id
иpost_id
, позволяет вам ссылаться на контент, который хранится на глобальном сайте.Вот шаги для реализации:
- Создайте метаполям для каждого поста на глобальном сайте, чтобы сохранить соответствующий
blog_id
иpost_id
. - При извлечении контента на подсайте, проверьте наличие
blog_id
. Если он присутствует, используйте функциюswitch_to_blog()
, чтобы переключиться на нужный блог и извлечь пост черезWP_Query
.
Пример кода:
$blog_id = get_post_custom_values('blog_id'); $post_id = get_post_custom_values('post_id'); if( !empty( $blog_id ) ) { switch_to_blog( $blog_id ); $query = new WP_Query( array( 'p' => $post_id )); if( $query->have_posts() ){ while( $query->have_posts() ){ $query->the_post(); // Выводите контент поста } } restore_current_blog(); }
Это позволит вам динамически загружать контент с глобального сайта, избегая дублирования.
- Создайте метаполям для каждого поста на глобальном сайте, чтобы сохранить соответствующий
-
Выбор глобальных событий:
Для управления событиями на глобальном и локальном уровне, вы можете использовать похожий подход. Создайте тип записи для событий, который будет применим ко всем подсайтам, а для глобальных событий добавьте соответствующийblog_id
. Затем, когда события необходимы на подсайте, переключитесь на глобальный сайт и выполните запрос. -
Плагин Multisite Content Copier (MCC)**:
Этот плагин позволяет копировать контент между сайтами в сети WordPress без дублирования его. Хотя MCC может создать дубликаты контента, вы можете настроить его для синхронизации контента и документации. Это даст возможность перекрывать контент на локальных сайтах, не создавая его копий. -
OPTIMIZE:
Для SEO оптимизации убедитесь, что в заголовках, мета-описаниях и URL присутствует ваш основной ключевой контент. Это поможет избежать проблем с дублированием контента и обеспечит четкую индексацию для поисковых систем.
Заключение
Существует несколько способов управления контентом для многоязычного веб-сайта без дублирования информации. Подход с использованием метаданных постов позволяет оптимально настраивать контент, обеспечивая при этом легкий доступ к нему. Не забывайте тщательно тестировать реализацию, чтобы гарантировать, что пользователи получают именно тот контент, который им нужен, и чтобы избежать возможных конфликтов при переключении между блогами.