Появилась необходимость реализовать следующий функционал:
есть несколько языков на сайте: английский, испанский и китайский. Новости пишут только на английском языке. Для остальных языковых версий нужно сделать тизер для каждой новости (превью / лид-текст новости) и если пользователь кликает по не ней — то переводить его на английскую версию сайта и открывать интересующую новость на английском языке.
Задача не тривиальная. Решение весьма простое.
Был написал следующий функционал в файле functions.php
add_action('pre_get_posts', function(){
if(in_array( get_post_type(), ['event', 'post']) && is_single())
{
$wpml_permalink = apply_filters( 'wpml_permalink', get_the_permalink(), 'en' );
if(ICL_LANGUAGE_CODE != 'en' && !empty($wpml_permalink))
{
$wpml_permalink = apply_filters( 'wpml_permalink', get_the_permalink(), 'en' );
echo '<script type="text/javascript">';
echo 'window.location = "'.$wpml_permalink.'";';
echo '</script>';
}
}
});
Здесь мы проверяем
in_array( get_post_type(), [‘event’, ‘post’])
тип нашего поста event или post? Если да, то проходим к дальнейшей проверке:
is_single()
тут мы проверяем — является ли наша запись к существующему отдельному представлению. Это необходимо для того, чтобы в админке WordPress не выполнялся дальнейший код.
Собственно далее мы проверяем, не английский ли у нас язык (используется WPML плагин для мультиязычности) и если это так, то редиректим страницу на английскую версию сайта.
echo '<script type="text/javascript">';
echo 'window.location = "'.$wpml_permalink.'";';
echo '</script>';
где $wpml_permalink это ссылка на текущую новость на английском языке:
$wpml_permalink = apply_filters( 'wpml_permalink', get_the_permalink(), 'en' );