trumpetblast
  • 0
Новичок

Add_action(‘wp_ajax_[имя действия]’, моя функция) проблема

  • 0

У меня точно такая же проблема, описанная в этом посте: проблема add_action(‘wp_ajax_[имя действия]’, myfunction)

Я установил add_action(‘wp_ajax_my_function_call’,’my_ajax_function’). Если я печатаю_r($wp_filter) сразу после этой строки, мое действие находится в массиве $wp_filter.

Однако к тому времени, когда я делаю вызов jQuery.post для admin-ajax.php, мое действие исчезает из $wp_filter. Я проверил это, добавив это в строку 354 файла wp-includes/plugin.php:

if($tag=='wp_ajax_my_function_call') print_r($wp_filter);

По словам пользователя 1567 в процитированном выше сообщении, «проблема заключалась в порядке загрузки и расположении вызовов add_action». К сожалению, это не помогло мне отследить проблему. Я попытался установить приоритет add_action на 99 и на 1. Ничего не помогло.

Любые другие идеи о том, что может быть причиной этой ситуации, или объяснение того, почему вообще действие, которое определенно было в $wp_filter в какой-то момент, необъяснимым образом исчезло из него, даже не сработав?

Share
  1. Попробуйте разместить «add_action» в файле functions.php темы, посмотрите, имеет ли это какое-то значение, а также убедитесь, что вы добавили параметр действия в свой пост ajax. Но, не видя полной настройки, трудно сказать.

    • 0
    • В какой файл/файлы вы помещаете этот код?

      • 0
    • Это определенно правильно публикуется на admin-ajax.php. Та строка кода, которую я вставил в 354 в plugin.php, срабатывает, когда admin-ajax.php запускает указанное мной действие do_action. Проблема в том, что действие уничтожается в строке 371, потому что по какой-то причине во время вызова ajax его больше нет в $wp_filter. Вот почему я думаю, что ваше первое объяснение, что что-то отменяет регистрацию действия, кажется наиболее вероятным на данный момент. Есть идеи?

      • 0
    • Попробуйте изменить имя хука действия.

      • 0
    • Боюсь, так не пойдет. Очевидно, имя хука действия, которое я здесь дал, было общим. Это довольно специфично в реальном коде, так что это никак не может вызвать конфликт. Я просмотрю весь файл plugin.php, отследю ошибку и опубликую результаты здесь. Спасибо за ваши мысли.

      • 0
    • Не тратьте время на просмотр plugin.php. Оно работает. Я занимаюсь AJAX-разработкой без проблем с версии 2.9 (именно тогда я начал, а не прекратились какие-либо проблемы). Что было бы более полезным, так это вставка вашего кода. Это неизвестная переменная здесь.

      • 0
    • Извиняюсь. Я не имел в виду, что в plugin.php есть ошибка. Я уверен, что нет. Но изучение его, безусловно, покажет, где проблема в моем коде, и в любом случае было бы неплохо ознакомиться с ним поближе. Я согласен с тем, что на данном этапе никто не может реально помочь, не вставляя код, но это довольно сложная тема, и, честно говоря, я думаю, что на этом этапе было бы более плодотворно отследить проблему самостоятельно. Однако спасибо за предложение.

      • 0
  2. Есть только три объяснения, почему это не работает:

    Во-первых, что-то может отменять регистрацию вашего действия. Хотя это маловероятно.

    Во-вторых, ваш код никогда не запускается при инициализации ajax.

    В-третьих, wp_ajax_my_function_call крючок никогда не срабатывает.

    Я бы не беспокоился о возможности первого.

    Что касается второго, просто убедитесь, что ваш код запускается до wp_loaded, так как что-либо после этого (т.е. template_redirect, wp, pre_get_posts ) не запускается при загрузке ajax.

    В-третьих, просто убедитесь, что вы отправляете запрос ajax на wp-admin/admin-ajax.php.

    Кроме того, если вы еще этого не сделали, я предлагаю быстро прочитать admin-ajax.php и wp-settings.php.

    • 0
  3. Я только что столкнулся с подобной проблемой в одном из моих плагинов (и наткнулся на этот вопрос). В моем случае я отследил это до условного оператора в моей функции admin_init. Пытаясь не загружать код моего плагина (а также javascript и CSS) на каждой странице администратора, я включил следующую проверку:

    $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : NULL ;
    if ($uri && (strpos($uri,'post.php') OR strpos($uri,'post-new.php')) ) { 
       add_action( 'wp_ajax_my_plugin', 'my_plugin_callback' );
       // load scripts etc.
    }
    

    Это отлично работает, чтобы добавить мое действие в $wp_filter при загрузке страницы post-new.php. Но когда сценарий AJAX отправляет свои данные в admin-ajax.php, он, конечно же, снова запускает функцию admin_init (поскольку она запускается при каждой загрузке страницы администратора), и в этот момент URI не включает «post.php» или « пост-новый.php’.

    Я переместил оператор add_action wp_ajax за пределы моего теста URI, и теперь он отлично работает.

    • 0

Оставить ответ

You must login to add an answer.