Наследование постов и страниц для подсайтов в сети WordPress

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

Мне нужно разработать многоязычный веб-сайт для нескольких стран. В одной стране может быть несколько языков. Я настроил сеть WordPress и создал подсайты для каждой страны, как показано ниже.

abc.com/ > Глобальный веб-сайт
abc.com/usa > Веб-сайт США
abc.com/fra > Веб-сайт Франции

Я определяю страны через API геолокации и принудительно перенаправляю их на веб-сайт их страны. У каждой страны есть свой набор языков, например, во Франции будут английский и французский, причем французский – это язык по умолчанию. Я решил использовать PolyLang для языковых переводов. Это работает отлично.

abc.com/fra/ > веб-сайт по умолчанию на французском
abc.com/fra/en > английский перевод французского веб-сайта.

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть дублирующийся английский контент на каждом подсайте. Есть ли способ избежать дубликатов и чтобы английская версия подсайтов использовала английские страницы/посты с глобального сайта? В идеале администратор должен иметь возможность выбрать, какой пост идет на подсайт, а какой нет.

Также есть раздел событий, который может содержать как глобальные события, так и местные/национальные события.

Я могу подумать о следующих решениях и их недостатках

  1. Плагин ThreeWP Broadcast. Этот плагин транслирует страницы/посты на другие сайты по выбору. Кажется отличным вариантом, но он дублирует контент, чего я стараюсь избежать. Более того, я не уверен, как это будет работать с переводами PolyLang.

  2. Добавление действия ‘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();

ссылка:

  1. http://codex.wordpress.org/Function_Reference/switch_to_blog
  2. http://codex.wordpress.org/Class_Reference/WP_Query

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

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

Проблема

У вас есть глобальный сайт и несколько подсайтов для каждой страны, при этом для каждого subsite реализована локализация контента через плагин Polylang. Проблема заключается в том, что на каждом подсайте существует дублирующийся English контент, что может привести к избыточности данных и потенциальным трудностям в управлении.

Решение

  1. Использование метаданных постов:
    Предложенный вами подход с использованием метаданных постов является хорошей начальной точкой. Создание двух метаполей: 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();
    }

    Это позволит вам динамически загружать контент с глобального сайта, избегая дублирования.

  2. Выбор глобальных событий:
    Для управления событиями на глобальном и локальном уровне, вы можете использовать похожий подход. Создайте тип записи для событий, который будет применим ко всем подсайтам, а для глобальных событий добавьте соответствующий blog_id. Затем, когда события необходимы на подсайте, переключитесь на глобальный сайт и выполните запрос.

  3. Плагин Multisite Content Copier (MCC)**:
    Этот плагин позволяет копировать контент между сайтами в сети WordPress без дублирования его. Хотя MCC может создать дубликаты контента, вы можете настроить его для синхронизации контента и документации. Это даст возможность перекрывать контент на локальных сайтах, не создавая его копий.

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

Заключение

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

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

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