it-swarm.com.de

wp_ajax_nopriv_xxx wird nicht auf einer Site ausgelöst, funktioniert auf allen anderen. -1 für ausgeloggte Benutzer

mein Plugin verwendet add_action für wp_ajax_cl_ajax und wp_ajax_nopriv_cl_ajax in seinem Code und auf den wenigen tausend Sites, die es verwenden, ist es in Ordnung, aber eine Site funktioniert nicht für abgemeldete Benutzer

ein angemeldeter Benutzer ist in Ordnung, der Code sendet eine Anfrage an Ajax und alles wird in Ordnung zurückgegeben.

in anderen Blogs ist ein ausgeloggter Benutzer in Ordnung, aber in diesem einen Blog wird eine -1 für die Ajax-Anforderung zurückgegeben.

Ich habe dem Plugin Debug-Code hinzugefügt, um bei der Funktion do_ajax mit einer Meldung zu sterben, aber es gelangt nicht einmal zu dieser Funktion.

hier ist die Aktion für den ausgeloggten Benutzer ajax add_action('wp_ajax_nopriv_cl_ajax','do_ajax');

die Funktion hat dies

function do_ajax(){
    if(isset($_REQUEST['debug'])){
      die('in ajax function');
   }
}

Ich ändere einfach die Ajax-URL, um eine Variable für das Debuggen (..../wp-admin/admin-ajax.php? Debug = true) auf meinen Test-Sites zu haben. Für einen angemeldeten Benutzer stirbt sie, aber für einen angemeldeten out user gibt nur -1 zurück, was besagt, dass die Aktion nicht einmal ausgelöst wird. Ich habe der Funktion, die die Aktionen für has_filter hinzufügt, mehr Debug-Code hinzugefügt und sie gibt 1 zurück, damit ich weiß, dass die Aktion hinzugefügt wurde, aber nicht ausgelöst wurde.

Ich habe versucht, das Thema zu ändern, aber keine Freude

die Seite benutzt wp 3.2

hat jemand Erfahrung damit, dass wp_ajax_nopriv_xxx nicht feuert? was hat es für dich verursacht?

wie gesagt, es funktioniert gut in anderen Blogs, daher weiß ich, dass es sich nicht um Tippfehler oder fehlenden Code handelt.

was kann ich noch tun, um festzustellen, warum die Aktion nicht ausgelöst wird?

1
CommentLuv

Die Bedingung für das Auslösen eines solchen Hakens ist gemäß admin-ajax.php recht einfach:

if ( !empty( $_REQUEST['action'] ) )
    do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );

Die wahrscheinlichen Gründe sind also:

  1. Ihr Skript übergibt den Aktionsnamen nicht richtig (was unwahrscheinlich ist, wenn genau derselbe Code für den angemeldeten Benutzer funktioniert).
  2. Der Aktionsname wird in WordPress durch irgendetwas durcheinander gebracht und es hängt irgendwie davon ab, ob ein Benutzer angemeldet ist.

Ich würde versuchen, mich in admin_init einzuklinken und den gesamten $_REQUEST auszugeben.

1
Rarst

Ich glaube nicht, dass Ihre wp_ajax_nopriv Aktion nicht korrekt registriert ist. Es wurde nur von admin-ajax.php abgelehnt. Ich hatte einen ähnlichen Fehler mit dem Aktionshandler wp_ajax, der -1 für die Benutzerrolle contributer zurückgab.

Das Problem war, dass ich den Zugriff auf das Admin-Backend für diese Benutzergruppe auf dem Aktions-Hook admin_init eingeschränkt hatte. Wie Sie in admin-ajax.php sehen können, wird dieser Hook in den ersten Zeilen aufgerufen, sodass die Anfrage dort abgelehnt wurde.

Möglicherweise haben Sie ein ähnliches Problem oder haben einige ausgefallene Plugins aktiviert, die irgendwann im Code stören.

Wenn Sie den Fehler nicht reproduzieren konnten, versuchen Sie, die Datei admin-ajax.php zu durchsuchen und alle -1-Rückgabewerte schrittweise durch Ihre eigene Fehlermeldung zu ersetzen. Es ist ein bisschen umständlich, aber Sie können den Grund finden.

1
rofflox