it-swarm.com.de

add_filter comment_edit_redirect funktioniert nicht

In meinem Plugin habe ich diese Aussage

add_filter( 'comment_edit_redirect', 'mcd_return_link');

und diese Funktion

function mcd_return_link {
   return "edit-comments.php";
}

In der comments.php (Kerndatei) befindet sich dieser Codeabschnitt (innerhalb des Abschnitts zum Bearbeiten von Kommentaren, um Zeile 310) (Version 4.720)

$location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id;

/**
 * Filters the URI the user is redirected to after editing a comment in the admin.
 *
 * @since 2.1.0
 *
 * @param string $location The URI the user will be redirected to.
 * @param int $comment_id The ID of the comment being edited.
 */
$location = apply_filters( 'comment_edit_redirect', $location, $comment_id );
wp_redirect( $location );

Mit dem add_filter soll der $location-Wert in der Datei comments.php geändert werden, um zum Bildschirm mit den Kommentarlisten (in admin) zurückzukehren.

Mein Plugin verwendet also einen Shortcode, der auf einer Seite eingegeben wird

  • der Shortcode erstellt eine Liste mit Kommentaren, wobei jeder Kommentar einen Link zum Bearbeitungsbildschirm dieses Kommentars enthält.
  • links zum Bildschirm zum Bearbeiten von Kommentaren für einen bestimmten Kommentar haben (tut es)
  • wenn ich auf diesen Link klicke, gehe ich zum Bearbeitungsbildschirm des Kommentars.
  • klicken Sie auf die Schaltfläche 'Aktualisieren', um zur Seite edit-comments.php zurückzukehren (dies ist nicht der Fall).

Um zu überprüfen, ob der Filter angewendet wird, habe ich auf meinem Testsystem Code vor und nach der Zeile apply_filters in core comments.php hinzugefügt, um den $location auszugeben. Wert.

Beide Werte (davor und danach) zeigen die aufrufende Seite (meine Seite, auf der Kommentare mit Bearbeitungslinks angezeigt werden). Es wird nicht zur Seite 'edit-comments.php' weitergeleitet, sodass der Filter anscheinend nicht angewendet wird.

Ich habe versucht, die Priorität von add_filter auf 7 und 15 zu ändern, ohne dass dies Auswirkungen hat.

Ich habe auch die globale Variable $wp_filter ausgegeben, um sicherzustellen, dass der Filter erkannt wurde (wurde).

Warum wird der Filter nicht angewendet?

** (Bearbeitet am 6. Februar nach vorgeschlagenen Antworten) **

Ich habe eine echo-Anweisung und ein wp_die () in die Filterfunktion eingefügt. Ich habe dieses Problem auch auf meiner Test-Multisite weiter getestet.

  • Der vom Plugin verwendete Shortcode befindet sich auf einer Seite auf der Hauptunterseite (Site 0) des Multisite-Testsystems.
  • links zu allen Kommentaren führen zur Bearbeitungs-URL des Kommentars
  • alle Kommentare auf der Unterwebsite "Site 0" (auf der die Liste der Kommentare aller Websites angezeigt wird) führen Sie zum Bearbeitungsbildschirm für Kommentare. Mit "Aktualisieren" kehren Sie dann zu der vom Filter definierten Seite zurück (wie beabsichtigt).
  • alle Kommentar-Links von Site-1 oder anderen Sites, die nicht zu Site-0 gehören, führen Sie zum Kommentar-Bearbeitungsfenster. Mit "Aktualisieren" wird die aufrufende Seite neu geladen (die Seite mit der Kommentarliste nicht wie beabsichtigt)
  • wenn wp_die () in die Filterfunktion eingefügt ist (die Funktion, die die gewünschte Rückgabeseite einrichtet und die $ location-Einstellung in comments.php überschreibt), zeigt der Site-0-Bearbeitungs-/Aktualisierungsprozess die Meldung 'wp_die' an. Beim Bearbeiten/Aktualisieren von Site-1 oder Site-2 wird die Meldung "wp_die" nicht angezeigt .

Daraus schließe ich, dass der Add-Filter aus irgendeinem Grund nicht durch einen Link zu einem Kommentar auf Site-1 oder Site-2 aufgerufen wird, sondern funktioniert, wenn er von einem Link zu einem Kommentar auf Site-0 aufgerufen wird. Auch hier befindet sich die Seite, auf der die Kommentare angezeigt werden, auf Site-0.

Warum funktioniert der Add-Filter bei keinem Link zum Kommentarbearbeitungsbildschirm für Site-1 oder Site-2, wenn er auf Site-0 ordnungsgemäß funktioniert?

1
Rick Hellewell

Eine Antwort, die eine andere Frage aufwirft ...

Ich hatte eine plötzliche Erscheinung ... Wenn das Plugin auf Site-1 oder Site-2 nicht aktiv ist und Sie auf einen Link zu einem Kommentar für Site-2 klicken, gelangen Sie zum Bildschirm zur Kommentarbearbeitung.

Da das Plugin jedoch auf Site-1/Site-2 nicht aktiv ist (obwohl "Netzwerk aktiviert" im Multisite-Administrator), funktioniert der Shortcode auf einer Site-1/2-Seite nicht und daher ist der Add_Filter nicht aktiv. t ausgeführt.

Es muss also einen Filter geben, der nur dann den add_filter ausführt, wenn für Kommentar-Links das Plugin auf der Site aktiviert ist, die den Kommentar enthält.

Aber ... das erklärt nicht, warum ich ein sehr ähnliches Plugin habe (das alle Medien auf allen Sites anzeigt, genannt 'Multisite Media Display') erlaubt dir zu:

  • führe die Seite mit dem Shortcode auf Site-0 aus
  • alle Medien für alle Unterwebsites anzeigen
  • ermöglicht das Bearbeiten beliebiger Medien auf einer beliebigen Unterwebsite
  • durch Klicken auf die Schaltfläche 'x' auf dem Bildschirm Medien bearbeiten, um zur Medienliste zurückzukehren, wird der Bildschirm Medienliste angezeigt.

Ich vermute, dass das 'x' in Media Edit keinen Code enthält, der angibt, zu welcher Seite Sie zurückkehren möchten (der Wert $ location in comments.php in Zeile 310).

Aber warum 'sieht' der Kommentareditor den Befehl add_filter für eine Site-1 nicht, wenn der Shortcode auf Site-0 ausgeführt wird?

Eine Antwort, die eine andere Frage aufwirft ...

0
Rick Hellewell

Versuchen Sie zur Erinnerung, diese Art von add_filter zu vermeiden.

add_filter( 'comment_edit_redirect', 'mcd_return_link');

versuchen Sie immer die Anzahl der Parameter einzustellen, sonst ist die Standardeinstellung eins.

add_filter( 'comment_edit_redirect', 'mcd_return_link', 10 , 2);
1
prosti

Warum wird der Filter nicht angewendet?

Schwer zu sagen. Versuchen Sie, den folgenden Code hinzuzufügen und dann einen Kommentar zu bearbeiten. Dies ist im Grunde dasselbe, was Sie bereits haben, aber eine anonyme Funktion mit den beiden Parametern verwenden.

add_filter( 'comment_edit_redirect', function( $location, $comment_id ) {
  wp_die( 'I\'m dead.' );
}, 10, 2 );

Ich habe versucht, und habe das erwartete Ergebnis oder WordPress sterben.

Wenn ich wp_die( 'I'm dead.' ); in return 'edit-comments.php'; ändere, werde ich nach dem Bearbeiten eines Kommentars wie erwartet zur Seite zum Bearbeiten von Kommentaren umgeleitet.

Wenn der Rückruf korrekt aufgerufen wird (der wp_die-Test) und der Filter weiterhin nicht angewendet wird, muss eine andere Plug-in-/Design-Funktionalität stören. Versuchen Sie, die Priorität auf etwas wirklich Großes wie 999999 zu ändern. Wenn dies nicht funktioniert, deaktivieren Sie alle anderen Plugins, während Sie ein Standarddesign verwenden.

1
Nathan Johnson