在调用自定义元框时,我非常喜欢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来触发它们)。
我该如何解决这些问题:
虽然我知道我只能用jQuery实现这一点。我可以接受使用PHP和jQuery的任何方式。
答案 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并返回true
或false
,但只有在编辑帖子时它才会返回true
。在新帖子中,它不会检查数据库,只需返回true
,因为我希望所有字段都处于活动状态。
然后我将使用jQuery根据单选按钮选择显示/隐藏我的必要字段。