This commit is contained in:
GP_DEV
2025-08-01 10:07:08 +03:00
parent 21562852ca
commit 7d7a28e789
54 changed files with 4554 additions and 6928 deletions

View File

@@ -3,6 +3,7 @@
/**
* Переключает язык (регионы) необходим плагин Polylang
* Поддерживает множественные вызовы на одной странице
* Исправлена проблема с архивами кастомных типов записей
*/
@@ -25,6 +26,11 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
padding: 6px;
gap: 4px;
}
@media (max-width: 767px) {
.pl-lang-switcher-container {
width: 100%;
}
}
.dark .pl-lang-switcher-container {
border: 1px solid rgba(248, 248, 248, 0.05);
@@ -58,6 +64,14 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
padding-right: 12px;
}
@media (max-width: 767px) {
.pl-lang-switcher-button,
.pl-lang-switcher-container a{
flex-grow: 1;
}
}
.dark .pl-lang-switcher-button,
.dark .pl-lang-switcher-container a {
color: #b9b7b9;
@@ -100,11 +114,41 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
$class = $is_current ? 'pl-lang-switcher-current' : '';
$lang_url = '';
if (function_exists('pll_home_url')) {
if (is_singular() && function_exists('pll_get_post')) {
$translated_post_id = pll_get_post(get_the_ID(), $lang_slug);
if ($translated_post_id) {
$lang_url = get_permalink($translated_post_id);
if (is_singular() && function_exists('pll_get_post')) {
$translated_post_id = pll_get_post(get_the_ID(), $lang_slug);
if ($translated_post_id) {
$lang_url = get_permalink($translated_post_id);
} else {
$lang_url = pll_home_url($lang_slug);
}
}
elseif (is_post_type_archive()) {
$post_type = get_post_type();
if ($post_type && function_exists('pll_get_post_type_archive_link')) {
$lang_url = pll_get_post_type_archive_link($post_type, $lang_slug);
}
if (empty($lang_url)) {
$archive_link = get_post_type_archive_link($post_type);
if ($archive_link) {
$lang_url = str_replace(home_url(), pll_home_url($lang_slug), $archive_link);
} else {
$lang_url = pll_home_url($lang_slug);
}
}
}
elseif (is_tax() || is_category() || is_tag()) {
$queried_object = get_queried_object();
if ($queried_object && function_exists('pll_get_term')) {
$translated_term = pll_get_term($queried_object->term_id, $lang_slug);
if ($translated_term) {
$lang_url = get_term_link($translated_term);
} else {
$lang_url = pll_home_url($lang_slug);
}
@@ -113,6 +157,39 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
}
}
elseif (is_archive()) {
if (is_author()) {
$author = get_queried_object();
if ($author) {
$author_posts_url = get_author_posts_url($author->ID);
$lang_url = str_replace(home_url(), pll_home_url($lang_slug), $author_posts_url);
} else {
$lang_url = pll_home_url($lang_slug);
}
}
elseif (is_date()) {
$current_url = home_url(add_query_arg(array(), $wp->request));
$lang_url = str_replace(home_url(), pll_home_url($lang_slug), $current_url);
}
else {
$lang_url = pll_home_url($lang_slug);
}
}
else {
if (function_exists('pll_home_url')) {
$lang_url = pll_home_url($lang_slug);
}
}
if (empty($lang_url)) {
$lang_url = pll_home_url($lang_slug);
}
$lang_name = '';
if (function_exists('pll_languages_list')) {
$lang_names = pll_languages_list(array('fields' => 'name'));
@@ -127,12 +204,24 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
$lang_name = strtoupper($lang_slug);
}
// Замена названий языков на кастомные
$custom_lang_names = array(
'Fakel Fitness' => 'Фитнес-центр',
'Fakel Gym' => 'Зал силовых'
);
if (isset($custom_lang_names[$lang_name])) {
$display_name = $custom_lang_names[$lang_name];
} else {
$display_name = $lang_name;
}
echo sprintf(
'<a href="%s" class="%s" data-lang="%s">%s</a>',
esc_url($lang_url),
esc_attr($class),
esc_attr($lang_slug),
esc_html($lang_name)
esc_html($display_name)
);
}
}
@@ -141,7 +230,6 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
<script>
document.addEventListener('DOMContentLoaded', function () {
// Инициализируем все переключатели языков на странице
const containers = document.querySelectorAll('.pl-lang-switcher-container[data-switcher-id="<?php echo $unique_id; ?>"]');
containers.forEach(function(container) {
@@ -209,7 +297,6 @@ $unique_id = 'plLangSwitcher' . $instance_counter;
e.preventDefault();
// Обновляем только в текущем контейнере
container.querySelectorAll('a').forEach(a => a.classList.remove('pl-lang-switcher-current'));
link.classList.add('pl-lang-switcher-current');