web-dev-qa-db-ja.com

管理画面に表示される前にメタフィールドの内容をフィルタリングする方法を教えてください。

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の内容を表示し、より読みやすいテキストを取得する方法を教えてください。

1
benny-ben

私は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;

}

これでうまく機能し、管理者パネルの編集画面で読みやすいテキストを視覚化できます。

0
benny-ben