Cmb2プラグインを使って、私はこのようにtextareaメタフィールドを持つメタボックスを作成しました:
function myprefix_register_metabox() {
$prefix = 'myprefix_';
$cmb = new_cmb2_box( array(
'id' => $prefix . 'metabox',
'title' => esc_html__( 'My Metabox', 'cmb2' ),
'object_types' => array( 'page' ),
) );
$cmb->add_field( array(
'name' => esc_html__( 'Text Area for Code', 'cmb2' ),
'id' => $prefix . 'textarea_code',
'type' => 'textarea_code',
'sanitization_cb' => 'my_sanitize_text_callback',
) );
}
add_action( 'cmb2_admin_init', 'myprefix_register_metabox' );
私はこのコールバック関数を使ってメタフィールドの内容をサニタイズします。
function my_sanitize_text_callback( $value, $field_args, $field ) {
$value = htmlentities( html_entity_decode( $value, ENT_QUOTES ), ENT_QUOTES );
return $value;
}
すべて問題なく動作しますが、管理パネルの編集画面に変換されたエンティティhtml_entity_decode()
を付けてdbに格納されているtextareaの内容を表示し、より読みやすいテキストを取得する方法を教えてください。
私はCMB2が値が表示される前にチェックされるカスタムエスケープ関数を作成する可能性を提供することを見ました。だから私はこのようにメタフィールドのescape_cb
パラメータを設定します:
$cmb->add_field( array(
'name' => esc_html__( 'Text Area for Code', 'cmb2' ),
'id' => $prefix . 'textarea_code',
'type' => 'textarea_code',
'sanitization_cb' => 'my_sanitize_text_callback',
'escape_cb' => 'my_escape_text_callback'
) );
次に、HTMLエンティティを対応する文字に変換するために、エスケープ用のコールバック関数を作成しました。
function my_escape_text_callback( $value, $field_args, $field ) {
$escaped_value = html_entity_decode( $value, ENT_QUOTES );
return $escaped_value;
}
これでうまく機能し、管理者パネルの編集画面で読みやすいテキストを視覚化できます。