如何在添加新帖子时使用WordPress CMB2插件显示条件自定义字段

时间:2015-01-16 15:13:01

标签: php jquery wordpress meta-boxes

在调用自定义元框时,我非常喜欢WordPress CMB2 Plugin。我开始知道it has a functionality如果条件匹配,则使用其show_on_cb参数加载自定义字段。

我有一个场景:

Product Type: ( ) A   ( ) B   ( ) C  //radio buttons
Field for A:  [                   ]  //textbox
Field for B:  [                   ]  //textbox
Field for C:  [                   ]  //textbox

CMB提供的过程是一种PHP方式,检查PHP条件,无论是当前状态(WordPress Cookie)还是数据库返回。

由于我需要在单选按钮选择时激活'em,这样,我无法实现这一点,因为我无法将任何规则传递给可以在单选按钮选择上触发的show_on_cb参数,如果函数返回false,整个<div>甚至都没有出现(所以我无法传递任何jQuery来触发它们)。

我该如何解决这些问题:

  1. 我需要根据单选按钮选择显示相应的字段。
  2. 我需要显示相应字段db返回的选项。
  3. 虽然我知道我只能用jQuery实现这一点。我可以接受使用PHP和jQuery的任何方式。

1 个答案:

答案 0 :(得分:1)

首先,我创建了一个仅适用于edit页面的功能 - 这意味着show_on_cb(值:'show_on_cb' => 'myproducts_product_typeA')仅在编辑帖子时才有效,因为我使用过get_current_screen()来决定。

function myproducts_product_typeA( $field ) {
    global $post;
    $screen = get_current_screen();
    if( $screen->action !== 'add' && $screen->post_type == 'my-products' ) {
        $product_type = get_post_meta( $post->ID, 'mp_product_type', TRUE );
        if( $product_type === 'A' ) return 1;
    } else {
        return 1; //to show on add-new page by default
    }
}

因此上面的函数将根据db中提取的数据检查db并返回truefalse,但只有在编辑帖子时它才会返回true。在新帖子中,它不会检查数据库,只需返回true,因为我希望所有字段都处于活动状态。

然后我将使用jQuery根据单选按钮选择显示/隐藏我的必要字段。