web-dev-qa-db-fra.com

Puis-je modifier wp_post> post_content juste avant son insertion/mise à jour?

J'aurais besoin d'appliquer une sorte de cryptage sur tout ce qui est inséré dans wp_post> post_content, alors je me demandais s'il y avait un moyen, soit de modifier le noyau (plutôt que de ne pas le faire), ou d'utiliser un filtre ou un crochet et une fonction, où je pourrais effectuez le chiffrement juste avant que le contenu ne soit enregistré.

Et ensuite, une fois que le front-end ou le back-end l’a appelé, pour appliquer un déchiffrement, avant que le post_content ne soit réellement utilisé.

Merci d'avance à tous ceux qui ont des conseils à ce sujet!

2
Pavel

D'accord, c'est possible, mais ce sera un peu délicat et je recommanderais de nombreux tests après le déploiement de cette solution.

Clause de non-responsabilité: J'utilise base64_encode et base64_decode comme fonctions de chiffrement/déchiffrement, mais vous pouvez bien sûr les modifier à votre guise.

La première partie (l'encodage avant la publication est stocké dans la base de données) est assez simple:

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 );

La deuxième partie est un peu plus compliquée, car WordPress utilise le contexte raw à de nombreux endroits et si ce contexte est utilisé, aucun filtre n'est appliqué aux champs de publication ...

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 C'est un peu triste qu'il n'y ait pas de possibilité facile de modifier post_content juste après l'avoir reçu de DB ... :(

1
Krzysiek Dróżdż