web-dev-qa-db-ja.com

データベースから取得された直後に投稿からコンテンツをグローバルにフィルタリング

更新または作成するたびに、特定のカスタム投稿タイプのコンテンツを暗号化します。それはうまくいっています。

バックエンドまたはフロントエンドのどちらからでも、すべてのWordPress読み取り操作のためにコンテンツをグローバルに復号化する方法はありますか?

そうでなければ私は必要なときに私のコードの至る所で私の復号化機能を使わなければならないでしょう。

the_contentフィルタはループ内でしか機能しないので使用できません。

1
e4rthdog

WP_Queryクラスのget_posts()メソッド内(3769行目)に、このフィルタがあります。

$this->posts = apply_filters_ref_array( 'the_posts', array( $this->posts, &$this ) );

バックエンドとフロントエンドの両方で、照会された投稿を修正するために使用できる一番最初のフックです。

$this->postsはクエリされた投稿の配列であるため、各投稿の内容を目的に合わせて簡単に変更できます。

例として、最初の投稿内容を変更します。

function wpse_modify_post_content($args) {

    $args[0]->post_content = 'This filter filters the content of a post right after it is fetched from the database';

    return $args;

}
add_filter('the_posts', 'wpse_modify_post_content');

特定の編集画面では、 content_edit_pre フィルタを使用できます。このフィルターは2つのパラメーターを受け入れます。

例:

function wpse_content_edit_pre($content, $post_id) {

    $content = 'This filter filters the content of a post which being loaded for editting.';

    return $content;

}
add_filter('content_edit_pre', 'wpse_content_edit_pre', 10, 2);

フィルタリファレンスをご覧になることをお勧めします。

3
MinhTri