如何筛选元字段的内容,然后才能在管理员中显示它?

时间:2018-10-02 作者:benny-ben

使用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;
}
一切正常,但如何查看存储在db中的textarea的内容以及转换的实体html_entity_decode() 在“管理”面板的“编辑”屏幕中,要获取更具可读性的文本?

1 个回复
最合适的回答,由SO网友: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;

}
现在它工作得很好,在管理面板的编辑屏幕中,我可以看到可读的文本。

结束

相关推荐

在自定义帖子类型的metabox中添加exta字段时出现问题

我正在尝试在metabox中添加一个新字段。有一个演示url字段工作正常。我创建了一个新字段,该字段没有存储或保存插入该字段的任何数据。这是我的大衣。// Adding meta box for freebie custom post type function demo_url_meta_box() { add_meta_box( \'demo_url_meta_box\', __( \'Freebie Details\'