Я разработал плагин, использующий API WPBakery, который в основном позволяет пользователю выбирать тип поста, а также таксономию, которая будет отображаться на веб-интерфейсе. Я пытаюсь добиться возможности динамического отображения дополнительных полей в зависимости от того, какая родительская таксономия выбрана первой.
Например, я отображаю все родительские таксономии в поле с несколькими выпадающими списками. В зависимости от того, какие таксономии выбраны, я затем хочу отобразить дополнительные выпадающие списки с потомками этих таксономий в качестве вариантов выбора.
На данный момент, я чувствую, что мое единственное решение - вывести тонну динамически именованных полей (как в каждый дочерний термин каждой родительской таксономии), и используйте некоторые JavaScript, чтобы показать / скрыть выбранные в качестве раскрывающихся списков. Это кажется ужасной реализацией, с чрезмерным HTML в DOM (хотя и скрытым).
Я также рассмотрел введение параметров в DOM, но я не совсем уверен, как обращаться с ними на бэкэнд, так как они, вероятно, не зарегистрированы.
Существует param_group
, но, похоже, он используется для полей повторителя, а не для динамического c заполнения.
Мой код выглядит как это:
function YYY() {
add_shortcode('YYY', 'YYY');
$markup = 'YYY';
$types = get_post_types([], 'array');
$post_types = array("All");
foreach($types as $type) {
$post_types[] = $type - > name;
}
$taxonomies = get_taxonomies();
foreach($taxonomies as $taxonomy) {
$post_taxonomies[] = $taxonomy;
}
vc_map(array(
"name" => __("YYY"),
"base" => "YYY",
"category" => __('Content'),
"custom_markup" => $markup, // @TODO how do we access shortcode's attributes here to display in bakery grid
"params" => array(
array(
'type' => 'dropdown_multi',
'heading' => __('Select a post type', VAE_TEXT_DOMAIN),
'param_name' => 'post_types',
'value' => $post_types,
'description' => __('Select a post type', VAE_TEXT_DOMAIN),
'admin_label' => false,
'save_always' => true,
),
array(
"type" => "dropdown_multi",
"holder" => "div",
"class" => "",
"heading" => __("Count"),
"param_name" => "count",
"value" => array("All", "3", "6"),
"description" => __("How many tiles to show")
),
array(
"type" => "dropdown_multi",
"holder" => "div",
"class" => "",
"heading" => __("Select Taxonomy(ies)"),
"param_name" => "taxonomies",
"value" => $taxonomies,
"description" => __("Post with selected taxonomies will be shown")
),
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Taxonomies Operator"),
"param_name" => "taxonomies_operator",
"value" => array("IN - posts which match ANY selected taxonomy", "NOT IN - post which DO NOT match ANY selected taxonomy", "AND - posts which match ALL selected taxonomy"),
"description" => __("Posts with selected Tags will be shown")
), //@TODO how do I dynamically add dropdowns here with key/value pairs dynamically populated by above taxonomies dropdown
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Header Style"),
"param_name" => "header_style",
"value" => array("h2", "h3", "Visual Style/Color"),
"description" => __("")
),
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Read More Text"),
"param_name" => "read_more_text",
"value" => array("Read More", "Learn More", "Download"),
"description" => __("")
),
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Link Target"),
"param_name" => "link_target",
"value" => array("Self", "Blank"),
"description" => __("")
),
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Order By"),
"param_name" => "order_by",
"value" => array("Date"),
"description" => __("")
),
array(
"type" => "dropdown",
"holder" => "div",
"class" => "",
"heading" => __("Sort By"),
"param_name" => "sort_by",
"value" => array("ASC", "DESC"),
"description" => __("")
),
array(
"type" => "checkbox",
"holder" => "div",
"class" => "",
"heading" => __("Front-End Filter (Only shows chosen taxonomies)"),
"param_name" => "front_end_filter",
"value" => array("Show" => "show", "Hide" => "hide"),
"description" => __("")
),
array(
"type" => "checkbox",
"holder" => "div",
"class" => "",
"heading" => __("Pagination"),
"param_name" => "pagination",
"value" => array("Show" => "show", "Hide" => "hide"),
"description" => __("")
),
array(
"type" => "checkbox",
"holder" => "div",
"class" => "",
"heading" => __("Icon"),
"param_name" => "icon",
"value" => array("Show" => "show", "Hide" => "hide"),
"description" => __("")
),
array(
"type" => "checkbox",
"holder" => "div",
"class" => "",
"heading" => __("Featured Image"),
"param_name" => "featured_image",
"value" => array("Show" => "show", "Hide" => "hide"),
"description" => __("")
),
array(
"type" => "checkbox",
"holder" => "div",
"class" => "",
"heading" => __("Excerpt"),
"param_name" => "excerpt",
"value" => array("Show" => "show", "Hide" => "hide"),
"description" => __("")
),
array(
"type" => "textfield",
"holder" => "div",
"class" => "",
"heading" => __("Row Class"),
"param_name" => "row_class",
"value" => "",
"description" => __("")
),
array(
"type" => "textfield",
"holder" => "div",
"class" => "",
"heading" => __("Row ID"),
"param_name" => "row_id",
"value" => "",
"description" => __("")
),
)
));
}