Как мне динамически отображать дополнительные параметры с помощью vc_map () WPBakery - PullRequest
2 голосов
/ 15 января 2020

Я разработал плагин, использующий 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" => __("")
      ),
    )
  ));
}

1 Ответ

0 голосов
/ 17 января 2020

Оказывается, что использовать параметр dependency довольно просто, например:

array(
         "type" => "dropdown_multi",
         "holder" => "div",
         "class" => "",
         "heading" => __("Select Category(ies)"),
         "param_name" => "categories",
         "value" => $post_categories,
         "description" => __("Posts with selected categories will be shown"),
         "dependency" => array(
            "element" => 'taxonomies',
            'value' => 'category'
         )
      )
...