web-dev-qa-db-ja.com

挿入/更新の直前にwp_post> post_contentを編集できますか?

Wp_post> post_contentに挿入されるものにはなんらかの暗号化を適用する必要があるので、コアを変更する(むしろしない)か、フィルタやフックと関数を使用しても可能な方法があるかどうか疑問に思いました。コンテンツが保存される直前に暗号化を実行します。

そして、フロントエンドまたはバックエンドによって、post_contentが実際に使用される前に、復号化を適用するように要求されました。

問題についていくつかのアドバイスを誰かに事前に感謝します!

2
Pavel

これは可能ですが、少しややこしくなるので、このソリューションを展開した後に多くのテストを行うことをお勧めします。

免責事項:私はbase64_encodebase64_decodeを暗号化/復号化関数として使用していますが、もちろんそれらを好きなように変更することができます。

最初の部分(postがDBに格納される前のエンコーディング)はとても簡単です。

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

2番目の部分は、少し厄介です。WordPressは多くの場所でrawコンテキストを使用しており、このコンテキストが使用されている場合、投稿フィールドにフィルタは適用されません。 ..

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。 DBから取得した直後にpost_contentを変更することは簡単ではないことが少し残念です... :(

1