CMB2 / CMB2-Snippet-Library

CMB2 Code Snippet Library
360 stars 145 forks source link

Show_on_cb option based on meta-value (Not working?) #107

Closed pgroot91 closed 4 years ago

pgroot91 commented 4 years ago

Hi Guys,

I was testing the following example https://github.com/CMB2/CMB2-Snippet-Library/blob/master/conditional-display/show-if-matching-meta-value.php

But it seems it doesn't work anymore! Is this still supported to use show_on_cb with the latest cmb2 master release?

Any advice?

tw2113 commented 4 years ago

Yes, show_on_cb should still be totally valid and us removing that would probably cause a lot of havoc if we did.

What is your code that you're trying with, if not an exact match of the example code at the link? Also are you for sure specifying it as 'show_on_cb' => 'cmb_only_show_for_external', potentially with your own function name in that spot?

pgroot91 commented 4 years ago

@tw2113 i dropt the code in my functions.php for testing as the demo provided from the snippet library.

tw2113 commented 4 years ago

definitely a valid place to put the callback, but the question at this point is what is it returning that may be causing it to not evaluate like you're expecting.

pgroot91 commented 4 years ago

I don't have any errors what so ever. But the metabox is not showing up.

From my understanding in the example is that if you choose external in the status metabox the metabox of contact info should show up.

tw2113 commented 4 years ago

it depends. The callback function you provide, whether it be cmb_only_show_for_external specifically or whatever function you've created, simply needs to return a boolean value. Thus inside the function, you need to find a way to check for the condition you want.

So if your code is evaluating and returning false, then the metabox wouldn't show. This would also be the case for any sort of falsey value in PHP. Returning empty string, for example, I believe would result in it not showing in that case. All in all it's really depending on how the code is laid out for you.

pgroot91 commented 4 years ago

👌 so i need to have that option saved before the metabox shows up. my mistake :D I think i need to figure out a solution and go back to cmb2-conditionals on how to figure out on how to make it work for both metaboxes and tabs.

tw2113 commented 4 years ago

something like return ( 'external' === $myvar || empty( $myvar ) ) would technically work, which would check for those empty value cases OR 'external' is the value. Any other string value, with this quick example, would return false.