Вопрос или проблема
Я нов в WordPress и у меня проблема с созданием сайта. Я использую тему Sydney и плагин Polylang для моего многоязычного сайта.
Я создал сайт на 4 различных языках и теперь хотел бы иметь другой текст для подвала для каждого языка в нижней части подвала.
Например, где на английском языке написано ‘Copyright I Privacy policy‘, с гиперссылкой на provacypolicy/en
, которую я создал. Для немецкой стартовой страницы язык подвала должен автоматически меняться на ‘Copyright I Datenschutz‘, с гиперссылкой на Datenschutz на немецкой странице с privacypolicy/de
, которую я создал. И то же самое для других языков.
Я пытался редактировать это в footer.php
, но мне не повезло.
Мой существующий код для <div class="site-info container">
в footer.php
:
© <?php echo date("Y"); ?> | Название компании | Все права защищены | <a href=
"http://localhost/companyname/wordpress/privacy-policy/">Политика конфиденциальности</a>
Когда я перехожу на немецкий язык, он должен измениться на:
© <?php echo date("Y"); ?> | Название компании | Alle Rechte vorbehalten | <a href=
"http://localhost/companyname/wordpress/datenschutz/">Datenschutz</a>
И то же самое для других двух языков.
Я РЕШИЛ ЭТУ ПРОБЛЕМУ.
Для всех, кто столкнется с той же проблемой, используйте код if - endif
в вашем footer.php.
Чтобы текст в теме мог быть переведен, текст должен передаваться в качестве аргумента через функции локализации __()
, _e()
.
echo __( ‘Пример текста для отображения’, ‘theme-textdomain’ );
_e( ‘Пример текста для отображения’, ‘theme-textdomain’ );
Больше функций и деталей вы можете найти здесь
В вашем случае это может выглядеть так:
© <?php
echo date("Y");
$page_id = 'ID_страницы_политики_конфиденциальности';
if ( function_exists('pll_get_post') )
$page_id = pll_get_post( $page_id );
$p_link = get_the_permalink($page_id);
$p_title = get_post_field('post_title', $page_id);
printf(' "https://wordpress.stackexchange.com/questions/312590/%s" %s | <a href="https://wordpress.stackexchange.com/questions/312590/%s">%s</a>',
'Название компании',
__('Все права защищены', 'some_textdomain'),
esc_url($p_link),
esc_html($p_title)
);
$page_id
можно задать как кодом, так и с помощью $page_id = get_page_by_path('privacy-policy')->ID;
.
$page_id = pll_get_post( $page_id );
Вышеуказанная строка получит ID страницы “Политика конфиденциальности” на текущем языке.
Следующий шаг — подготовить файлы с переводом de_DE.po
, de_DE.mo
и для 2 других языков. Отредактируйте существующие файлы в вашей теме или создайте новые, если необходимо. Список образцов инструментов доступен на вебсайте codex, среди прочего Loco Translate, Poedit.
Ответ или решение
Когда вы работаете с многоязычными сайтами на WordPress, особенно с использованием темы Sydney и плагина Polylang, задача адаптации текста футера под разные языки требует внимательного подхода. Давайте подробно рассмотрим, как вы можете реализовать различные тексты в футере для каждого языка, включая гиперссылки на соответствующие страницы политики конфиденциальности.
Решение проблемы
С учетом того, что вы уже работаете с кодом в файле footer.php
, начнем с его доработки. Чтобы обеспечить автоматическую замену текста футера в зависимости от языка, вам нужно использовать условные операторы и функции перевода в WordPress. Следующий код поможет вам в этом:
© <?php echo date("Y"); ?> | Company name | <?php
$page_id_privacy = get_page_by_path('privacy-policy')->ID; // Получаем ID страницы "Privacy policy"
// Проверяем, существует ли функция Polylang
if ( function_exists('pll_get_post') ) {
$page_id_privacy = pll_get_post( $page_id_privacy );
}
$p_link_privacy = get_the_permalink($page_id_privacy);
$p_title_privacy = get_post_field('post_title', $page_id_privacy);
// Отображаем текст футера в зависимости от языка
if ( pll_current_language() == 'de' ) {
printf('Alle Rechte vorbehalten | <a href="%s">%s</a>', esc_url($p_link_privacy), esc_html($p_title_privacy));
} elseif ( pll_current_language() == 'fr' ) {
printf('Tous droits réservés | <a href="%s">%s</a>', esc_url($p_link_privacy), esc_html($p_title_privacy));
} else { // default to English
printf('All rights reserved | <a href="%s">%s</a>', esc_url($p_link_privacy), esc_html($p_title_privacy));
}
?>
Объяснение кода:
-
Получение ID страницы: Мы используем функцию
get_page_by_path
для поиска ID страницы "Privacy policy". Это позволяет избежать жесткого кодирования ID. -
Использование Polylang: Проверяется, доступна ли функция
pll_get_post()
. Если да, мы получаем ID страницы в текущем языке. -
Получение ссылки и заголовка: С помощью
get_the_permalink()
иget_post_field()
мы извлекаем ссылку и заголовок соответствующей страницы политики конфиденциальности. -
Условные операторы: Мы проверяем текущий язык с помощью
pll_current_language()
и выводим разные формулировки в футере на английском, немецком и французском языках.
Локализация
Интеграция локализации в вашу тему WordPress – еще один важный аспект. Используйте функции __()
и _e()
для перевода текстов на разные языки. Это позволит вам подготовить .po
и .mo
файлы для ваших языков. Например:
__('All rights reserved', 'your-text-domain');
_('Alle Rechte vorbehalten', 'your-text-domain');
Для этого вам понадобится инструмент, такой как Loco Translate или Poedit, для создания и управления файлами перевода.
Заключение
Теперь вы имеете четкое руководство по настройке текста футера для многоязычного сайта на WordPress. Не забывайте тестировать изменения на сайте, чтобы убедиться, что футер правильно отображается на всех языках. Используйте переводы для улучшения пользовательского опыта и следуйте лучшим практикам WordPress для поддержания качества кода и производительности вашего сайта.