web-dev-qa-db-de.com

Kann ich wp_post> post_content direkt vor dem Einfügen/Aktualisieren bearbeiten?

Ich müsste irgendeine Art von Verschlüsselung auf alles anwenden, was in wp_post> post_content eingefügt wird, also habe ich mich gefragt, ob es eine Möglichkeit gibt, entweder den Kern zu modifizieren (eher nicht) oder irgendeinen Filter oder Hook und eine Funktion zu verwenden, wo ich könnte Führen Sie die Verschlüsselung direkt vor dem Speichern des Inhalts durch.

Und dann einmal vom Frontend oder Backend aufgerufen, um eine Entschlüsselung durchzuführen, bevor der post_content tatsächlich verwendet wird.

Vielen Dank im Voraus an alle mit Ratschlägen zu diesem Thema!

2
Pavel

OK, das ist möglich, aber es wird ein bisschen knifflig und ich würde viele Tests nach der Bereitstellung dieser Lösung empfehlen.

Haftungsausschluss: Ich verwende base64_encode und base64_decode als Verschlüsselungs-/Entschlüsselungsfunktionen, aber Sie können sie natürlich beliebig ändern.

Erster Teil (Kodierung, bevor der Beitrag in der DB gespeichert wird) ist ziemlich einfach:

function encrypt_post_content( $data, $postarr ) {
    $data['post_content'] = base64_encode( $data['post_content'] );
    return $data;
}
add_filter( 'wp_insert_post_data', 'encrypt_post_content', 10, 2 );

Zweiter Teil ist etwas kniffliger, da WordPress an vielen Stellen den Kontext raw verwendet und wenn dieser Kontext verwendet wird, werden keine Filter auf Post-Felder angewendet ...

function decrypt_post_content( $content, $default_editor =false ) {
    return base64_decode( $content );
}
add_filter( 'the_editor_content', 'decrypt_post_content', 10, 2 );
add_filter( 'the_content', 'decrypt_post_content', 1, 1 );

PS. Es ist ein bisschen traurig, dass es keine einfache Möglichkeit gibt, post_content direkt nach dem Abrufen von DB zu ändern ... :(

1