Das Plugin Save Post. Check Links. prüft nach Speichern eines Inhalts, ob die enthaltenen Links gültig sind. Dafür wird in Gutenberg ein AJAX-Request abgeschickt und mit der Antwort eine gegebenenfalls notwendige Fehlermeldung ausgegeben.

Doch wie führen wir in Gutenberg am besten eine Aktion aus, nachdem ein Inhalt gespeichert wurde? Das ist eigentlich recht einfach.

subscribe() und isSavingPost()

Mit wp.data.subscribe() können wir alle Änderungen im Editor überwachen, und wp.data.select( 'core/editor' ).isSavingPost() gibt an, ob ein Inhalt gerade gespeichert wird. Der erste Impuls könnte deshalb sein (und war es bei mir), die Aktion auszuführen, wenn isSavingPost() wahr ist, allerdings ist der Inhalt dann noch nicht gespeichert, weil er ja gerade erst gespeichert wird.

Wir müssen also unsere Aktion ausführen, wenn isSavingPost() nicht mehr wahr ist (diese einleuchtende Lösung habe ich aus einem Gutenberg-GitHub-Issue-Kommentar). Und das geht so:

function({
    wp.domReady( function({
        var needsCheck = false;

        // Listen to changes in the editor.
        wp.data.subscribe( function({
            if ( wp.data.select( 'core/editor' ).isSavingPost() ) {
                needsCheck = true;
            } else if ( needsCheck ) {
                needsCheck = false;
                
                // Do action after save.
            }
        } );
    } );
}() );
Code-Sprache: JavaScript (javascript)

In Zeile 3 setzen wir die needsCheck-Variable auf false und beginnen in Zeile 6, alle Änderungen des Editors zu überwachen. Wenn der Inhalt nun gerade gespeichert wird, setzen wir needsCheck auf true, und wenn der Inhalt nicht gerade gespeichert wird, aber needsCheck wahr ist, führen wir unsere Aktion aus und setzen needsCheck wieder auf false.

Somit wird unsere Aktion immer ausgeführt, wenn isSavingPost() von true wieder auf false springt, also wenn der Inhalt nicht mehr gespeichert wird, sondern gespeichert ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert