Откуда ошибка AjaxURL has NOT been defined при поиске в wordpress?

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

Доброго дня!

Ковыряюсь с адаптацией поиска на сайте. Сделал нехитрую сортировку результатов по категориям через

<?php ip_search_filter_item_class('post'); ?>" href="<?php echo home_url(); ?>?s=<?php echo get_search_query(); ?>&cat=1">

<?php ip_search_filter_item_class('post'); ?>" href="<?php echo home_url(); ?>?s=<?php echo get_search_query(); ?>&cat=1">

Всё работает. Но! Есть забавный глюк. Все запросы ищутся нормально, но если поискать фразу "Бухгалтерия" или "Бухгалтерия 8", то вылезает ошибка "AjaxURL has NOT been defined".

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

П.с.: Нашёл как избавиться от ошибки. Нужен такой код, определяющий урл.

<? /*defined ajax url*/ add_action('wp_head', 'wordpress_frontend_ajaxurl'); function wordpress_frontend_ajaxurl() {     echo '<script type="text/javascript">            var ajaxurl = "' . admin_url('admin-ajax.php') . '";          </script>'; }?>

<? /*defined ajax url*/ add_action('wp_head', 'wordpress_frontend_ajaxurl'); function wordpress_frontend_ajaxurl() { echo '<script type="text/javascript"> var ajaxurl = "' . admin_url('admin-ajax.php') . '"; </script>'; }?>

Но вопрос остался)) Ошибка пропала но плывёт разметка страницы. Именно при ЭТОМ запросе. Как спасаться? :)

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

Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Ошибка AjaxURL has NOT been defined означает, что какой-то JavaScript ожидает глобальную переменную ajaxurl или AjaxURL, но она не была объявлена на странице. В админке WordPress переменная ajaxurl обычно есть, а на фронте её нужно передавать самостоятельно. Если ошибка появляется только при конкретном запросе, вероятно, в выдачу попадает блок/скрипт, который использует AJAX и подключается не всегда.

Правильный способ передать URL AJAX на фронт:

add_action('wp_enqueue_scripts', function () {
    wp_enqueue_script(
        'site-search',
        get_template_directory_uri() . '/assets/js/search.js',
        ['jquery'],
        '1.0',
        true
    );
 
    wp_localize_script('site-search', 'SiteAjax', [
        'url' => admin_url('admin-ajax.php'),
    ]);
});

add_action('wp_enqueue_scripts', function () { wp_enqueue_script( 'site-search', get_template_directory_uri() . '/assets/js/search.js', ['jquery'], '1.0', true ); wp_localize_script('site-search', 'SiteAjax', [ 'url' => admin_url('admin-ajax.php'), ]); });

В JS используйте переданный объект:

jQuery.post(SiteAjax.url, {
  action: 'my_search',
  query: searchQuery
});

jQuery.post(SiteAjax.url, { action: 'my_search', query: searchQuery });

Если старый скрипт требует именно AjaxURL, можно временно добавить совместимость:

wp_localize_script('site-search', 'AjaxURL', admin_url('admin-ajax.php'));

wp_localize_script('site-search', 'AjaxURL', admin_url('admin-ajax.php'));

Но лучше привести код к одному формату. Также проверьте, не ломает ли запрос «Бухгалтерия» HTML-разметку: кириллица в URL должна проходить через urlencode() или add_query_arg(), а не склеиваться вручную. Ссылку поиска формируйте так:

echo esc_url(add_query_arg([
    's' => get_search_query(),
    'cat' => 1,
], home_url('/')));

echo esc_url(add_query_arg([ 's' => get_search_query(), 'cat' => 1, ], home_url('/')));

И ещё проверьте регистр имени переменной. ajaxurl, AjaxURL и ajaxURL для JavaScript являются разными именами. Если один скрипт создаёт ajaxurl, а другой ждёт AjaxURL, ошибка останется. Быстрее всего это видно в консоли: выполните typeof ajaxurl и typeof AjaxURL на проблемной странице.

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

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

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

комментарий

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

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