web-dev-qa-db-ja.com

投稿のタイトルと詳細を暗号化/復号化する

投稿タイトルとその詳細をデータベースに保存する前に暗号化するために、Wordpressを利用するにはどうすればよいですか。

それでは、どのように私はそれが再び管理パネルに表示されるようになる前に、投稿タイトルと詳細を復号化するためにWordpressをタップするのですか?

1
user520300

投稿内容を保存する前に変更するには、 wp_insert_post_data フィルタを使用できます。

この例では、暗号化を表すための単純な/ダミーの方法を使用しています。各文字を対応するASCIIコードに置き換えるだけです。それはあなたの暗号化方法で置き換えられるべきです。

add_filter( 'wp_insert_post_data' , 'encrypt_post' , 99, 1 );
function encrypt_post( $data ) {
    // check if it's a post
    if('post' !== $data['post_type']) {
            return $data;
    }

    // this is just for demonstration purposes (a simple char to ascii code conversion), it should be replaced by your encryption method
    $title = str_split( $data['post_title'] );
    $title = array_map( function($n) { return ord( $n ); }, $title );
    $title = implode( ".", $title );
    $data['post_title'] =  $title;

    return $data;
}

そして、編集ページで投稿のタイトルを復号化するために、title_edit_preフィルタを使うことができます。

function decrypt_post_title( $title, $post_id ) {
    if( 'post' !== get_post_type( $post_id ) ) {
        return $title;
    }

    // same dummy ascii code to char conversion
    $title = explode( '.', $title );
    $title = array_map( function($n) { return chr( $n ); }, $title );
    $title = implode( "", $title );

    return $title;
}
add_filter( 'title_edit_pre', 'decrypt_post_title', 99, 2 );

他の投稿フィールドを復号化するには、他の動的 * _ edit_pre フィルタをチェックする必要があります。

2
dbeja