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