Wordpress Seite veröffentlichen: transition_post_status feuert nicht

KeinProblem

Ensign
Registriert
Okt. 2013
Beiträge
191
Hi,

Ich habe ein kleines Wordpress-Plugin geschrieben, welches auch gut funktioniert, bis auf eine noch fehlende Funktion, die allerdings sehr wichtig ist. Wenn eine neue Seite veröffentlicht wird, sollen die Post-ID, der Permalink und der Titel in eine Tabelle in der Datenbank eingetragen werden, damit das Plugin seine Arbeit machen kann.

Wenn ich mich nicht komplett falsch eingelesen habe, soll das mit dem transition_post_status Hook funktionieren. Bevor es an die Funktion geht, möchte ich testen, ob der Hook auch aufgerufen wird. Dafür habe ich einfach eine kleine Javascript-Ausgabe gebaut. Die Funktion sieht so aus:

Code:
function create_auto_rating($new_status, $old_status, $post){
global $post;
global $_POST;
?>
<script type="text/javascript">

var new_status = <?php echo json_encode($new_status);?>;
var old_status = <?php echo json_encode($old_status);?>;
var post = <?php echo json_encode($post);?>;
console.log(new_status);
console.log(old_status);
console.log(post);
</script>
<?php
}
add_action('transition_post_status', 'create_auto_rating', 10, 3);

Beim Klick auf "Neue Seite erstellen" funktioniert das auch, in der Console bekomme ich die erwartete Ausgabe. Wenn ich die Seite dann veröffentliche, passiert nichts. Die Console wird durch Aktionen nicht gelöscht, "Preserve log" ist aktiviert. Also sollten die Werte ja ausgeben werden. Um Fehler in meinem Plugin als Ursache auszuschließen, habe ich es deaktiviert und die Funktion in die functions.php meines Child-Themes kopiert.

Interessant ist dabei: Wenn ich innerhalb der Funktion eine weitere Funktion anlege, kriege ich einen Fehler, weil sie nicht redeclared werden kann. Dafür habe ich in der Console die gewünschte und erwartete Ausgabe in doppelter Ausführung. Wenn ich einen anderen Fehler einbaue, passsiert das ebenfalls. Nur ohne Fehler kriege ich die Ausgabe nicht. Die Seite wird veröffentlicht und in der Console passiert überhaupt nichts hinsichtlich der Funktion.

Welchen kapitalen Denkfehler habe ich da drin? Wird die Funktion ausgeführt und die Console von Chrome verheimlicht mir etwas? Die Lösung ist wahrscheinlich völlig einfach und logisch, aber ich komme einfach nicht drauf. Wordpress ist aktuell in Version 5.8.1.

Danke für jeden Vorschlag :)
 
Ev hilft dir Query Monitor weiter. wenn die transition nicht zu einer seitenausgabe führt, sondern zu einer internen weiterleitung (zurück button fragt nicht nach daten neu senden) kann es sein das es keine ausgabe gibt.

alternativ kannst du in der action funktion auch ein custom feld im artikel mit einem timestamp array füllen (und ein echo der feldinhalte) und so schauen was genau ankommt.

in eine log-datei schreiben geht natürlich auch.

wichtig zu verstehen ist auch das es zwei verschiedene wege sind, die sich hier trennen:
https://developer.wordpress.org/reference/functions/wp_transition_post_status/#used-by

  • wp-includes/post.php: wp_publish_post()
  • wp-includes/post.php: wp_insert_post()

diese beiden funktionen solltest du dir mal durchlesen im quellcode, dann hast du es leichter damit umzugehen.
 
Zuletzt bearbeitet:
HI,

danke für deine Antwort :) Es scheint wirklich am Javascript gelegen zu haben, die Funktion klappt wunderbar, wenn ich die Daten in die Datenbank schreibe und danach return mache, funktioniert das wie gewünscht :)

Vorher hat das mit und ohne return nicht funktioniert, als das Javascript noch drin war (return stand nach dem Javascript). Da habe ich nach der Datenbankfunktion nur noch ne weiße Seite bekommen. Jetzt läuft alles.

Danke nochmal für die Ideen :)
 
  • Gefällt mir
Reaktionen: netzgestaltung
Zurück
Oben