Почему на WP сайте код (плагин AJAX Load More) не грузит страницы исходя из языка?

Ссылка скопирована
1 ответ

Код для плагина AJAX Load More должен грузить в бесконечном скролле , при подходе к нижней границе страницы - страницы исходя из полученного языка материнской (текущей загруженной страницы).

Но почему-то грузит страницы как и без кода, то есть на произвольных языках.

Например на португальской странице плагин грузит страницы у которых в url не на португальском:

Почему на WP сайте код (плагин AJAX Load More) не грузит страницы исходя из языка?

на ru странице плагин грузит страницы у которых в url не на русском (еще не доделал на ru замену):

Почему на WP сайте код (плагин AJAX Load More) не грузит страницы исходя из языка?

Да, я есть еще не доделал что если страница на ru , чтоб он грузил внизу страницы на ru, но это не суть важно, т.к. даже на том же pt
языке который вроде я сделал, он не подсовывает в загрузку строго на pt языке.
код:

console.log('Начало работы скрипта Ajax Load More...');  // Получаем путь текущего URL var currentUrl = window.location.pathname; console.log('Текущий URL:', currentUrl);  // Регулярное выражение для определения языкового кода var languageRegex = /^/(zh|tr|pt|ja|it|id|fr|es|en|de)//;  var languagePath = currentUrl.match(languageRegex) ? currentUrl.match(languageRegex)[1] : '';  if (!languagePath) {     languagePath = 'ru';     console.log('Языковой путь: ru'); } else {     console.log('Языковой путь:', languagePath); }  // Функция для изменения запроса Ajax Load More перед отправкой window.almOnLoad = function(alm) {     console.log('Перед отправкой запроса Ajax Load More');     // Если языковой код присутствует и не 'ru', модифицируем путь для AJAX-запроса     if(languagePath !== 'ru') {         alm.ajaxurl = alm.ajaxurl.replace('/wp-admin/admin-ajax.php', '/' + languagePath + '/wp-admin/admin-ajax.php');         console.log('Модифицированный путь AJAX-запроса:', alm.ajaxurl);     } else {         // Если код 'ru' или отсутствует, используем стандартный путь AJAX-запроса         console.log('Стандартный путь AJAX-запроса для русского языка.');     } };  console.log('Скрипт Ajax Load More настроен.');

console.log('Начало работы скрипта Ajax Load More...'); // Получаем путь текущего URL var currentUrl = window.location.pathname; console.log('Текущий URL:', currentUrl); // Регулярное выражение для определения языкового кода var languageRegex = /^/(zh|tr|pt|ja|it|id|fr|es|en|de)//; var languagePath = currentUrl.match(languageRegex) ? currentUrl.match(languageRegex)[1] : ''; if (!languagePath) { languagePath = 'ru'; console.log('Языковой путь: ru'); } else { console.log('Языковой путь:', languagePath); } // Функция для изменения запроса Ajax Load More перед отправкой window.almOnLoad = function(alm) { console.log('Перед отправкой запроса Ajax Load More'); // Если языковой код присутствует и не 'ru', модифицируем путь для AJAX-запроса if(languagePath !== 'ru') { alm.ajaxurl = alm.ajaxurl.replace('/wp-admin/admin-ajax.php', '/' + languagePath + '/wp-admin/admin-ajax.php'); console.log('Модифицированный путь AJAX-запроса:', alm.ajaxurl); } else { // Если код 'ru' или отсутствует, используем стандартный путь AJAX-запроса console.log('Стандартный путь AJAX-запроса для русского языка.'); } }; console.log('Скрипт Ajax Load More настроен.');

Дополнительно:

Ответы:

Почему на WP сайте код (плагин AJAX Load More) не грузит страницы исходя из языка?

99% потому, что данный плагин не работает с твоим неизвестным решением мультиязычности.
Ваш КЭП.

  • решение это просто отдельные страницыпапки созданные независимо друг от друга и существующие независимо, называйте это как хотите, это сути это не меняет.

    Есть Url https://transscreen.ru/news11043/ это значит страница (page) на русском языке т. к. в нём нету ru.
    Есть вообще другая независимая страница, у которой другой url вот такой: https://transscreen.ru/pt/news11043/ она на португальском языке.

    Иными словами.... очень простая хотелка у меня, например у меня грузится страница https://transscreen.ru/pt/luboytext , значит внизу нее должен плагин AJAX Load More грузить вообще любые страницы с сайта transscreen.ru у которых в url вот такой патерн:
    https://transscreen.ru/pt/luboytext

    где luboytext- Любой текст)))

  • Михаил Компас, в таком случае про мультиязнычность знаешь только ты. Но не ВП. Вначале научи ВП понимать "языки".

    А для этого нормальные для используют плагины мультиязычности.

  • Refguser, но тут не в языках дело, а в выборочной загрузке страниц , то есть нужно загружать страницы у которых есть такой же паттерн в url как у материнской страницы
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

AJAX Load More будет грузить “не те языки”, если AJAX-запрос не получает текущий язык или если внутри запроса плагин не учитывает языковой фильтр. На обычной странице WPML/Polylang понимает язык из URL, а в AJAX-запросе контекст может потеряться.

Что нужно передавать в AJAX:

  • текущий язык;
  • ID текущей страницы или категории;
  • нужный post_type;
  • tax_query/meta_query, если выборка ограничена;
  • исключение уже загруженных записей, если нужно.

Если используете Polylang, язык можно передать как параметр и применить в запросе:

$args = [
    'post_type' => 'page',
    'posts_per_page' => 10,
    'lang' => sanitize_text_field($_POST['lang'] ?? pll_current_language()),
];

$args = [ 'post_type' => 'page', 'posts_per_page' => 10, 'lang' => sanitize_text_field($_POST['lang'] ?? pll_current_language()), ];

Для WPML часто помогает передать wpml_language или переключить язык перед запросом:

do_action('wpml_switch_language', sanitize_text_field($_POST['lang'] ?? 'ru'));

do_action('wpml_switch_language', sanitize_text_field($_POST['lang'] ?? 'ru'));

Если AJAX Load More использует shortcode, проверьте его параметры. У плагина есть настройки query_args/filters, и часто проще передать язык в shortcode или в кастомный repeater template, чем писать отдельный костыль.

Также проверьте, не кэшируется ли AJAX-ответ. Кэш-плагины иногда начинают отдавать один и тот же ответ для разных языков, если URL одинаковый и параметры не учитываются.

Диагностика простая: в DevTools откройте Network, найдите AJAX-запрос и посмотрите payload. Если там нет текущего языка, плагину неоткуда знать, какие записи грузить. Если язык есть, но результат неверный, проблема уже в PHP-обработчике запроса.

Итог: передавайте текущий язык в AJAX-запрос и явно учитывайте его в WP_Query/настройках AJAX Load More. Для мультиязычных сайтов нельзя рассчитывать, что AJAX сам сохранит контекст текущей страницы.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно