Как показать условные настраиваемые поля с помощью плагина 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 для их запуска).

Как я могу решить это:

  1. Мне нужно показать соответствующие поля в соответствии с выбором переключателя.
  2. Мне нужно показать соответствующее поле, что БД возвращает, как выбранный.

Хотя я знаю, что могу достичь этого исключительно с помощью 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, чтобы показать / скрыть мои необходимые поля в соответствии с выбором переключателя.

Другие вопросы по тегам