Как показать условные настраиваемые поля с помощью плагина WordPress CMB2 при добавлении поста new
Я большой поклонник WordPress CMB2 Plugin при вызове пользовательских мета-блоков. Я узнал, что он имеет функцию загрузки настраиваемого поля, если условие соответствует, используя его show_on_cb
параметр.
У меня есть сценарий:
Тип продукта: () A () B () C // переключатели Поле для A: [ ] // текстовое поле Поле для B: [ ] // текстовое поле Поле для C: [ ] // текстовое поле
Процесс, который предлагает CMB, - это способ PHP, проверка состояния PHP, будь то любое текущее состояние (WordPress Cookie) или возврат db.
Поскольку мне нужно активировать их при выборе переключателя, таким образом я не могу этого достичь, потому что не могу передать какое-либо правило show_on_cb
параметр, который может срабатывать при выборе переключателя, и если функция возвращает false
, целый <div>
даже не появился (поэтому я не могу передать jQuery для их запуска).
Как я могу решить это:
- Мне нужно показать соответствующие поля в соответствии с выбором переключателя.
- Мне нужно показать соответствующее поле, что БД возвращает, как выбранный.
Хотя я знаю, что могу достичь этого исключительно с помощью jQuery. Я могу принять любой способ, используя как PHP, так и JQuery.
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
}
}
Таким образом, вышеуказанная функция проверит БД и вернет true
или же false
согласно извлеченным данным из БД, но он вернет true
только когда сообщение отредактировано. В новом посте он не проверяет базу данных, а просто возвращает true
потому что я хочу, чтобы все поля были активными.
Затем я собираюсь использовать jQuery, чтобы показать / скрыть мои необходимые поля в соответствии с выбором переключателя.