首页 > 解决方案 > 是否可以将所选选项的标签动态设置为转发器字段的标签?

问题描述

Elementor 具有转发器字段类型,\Elementor\Controls_Manager::REPEATER. 文档(https://developers.elementor.com/elementor-controls/repeater-control/)说该字段的标签可以在title_field参数中定义:

'title_field' => '{{{ list_title }}}'

如果该字段是常规文本字段,这很好。但是,只要字段类型是可选择的,例如\Elementor\Controls_Manager::SELECT{{{ field_name }}}事物(无论被称为什么)都会利用所选选项的值。这当然是合乎逻辑的,但不切实际,因为选项值通常是在编程上下文中可用的东西,而且人类阅读起来不是很愉快。

有没有办法改用标签?通过标签,如果是选择元素,我指的是所选option标签的内部文本。

标签: javascriptphpwordpresselementor

解决方案


这可能不是最复杂的解决方案,但它确实有效。<#可以通过在括号和#>括号之间添加javascript代码来操作密钥。

// Define the labels
$labels = [
    'foo' => __('Foo'),
    'bar' => __('Bar'),
];
    
// Convert to JSON
$labels_json = json_encode($labels);

// $this refers to the widget object; context here is the _register_controls() method
$this->add_control('meta_keys', [
    'label' => __('Meta keys'),
    'type' => \Elementor\Controls_Manager::REPEATER,
    'title_field' => "<# "
        . "let labels = $labels_json; " // Now the labels are available to the javascript
        . "let label = labels[key]; "
        . "#>"
        . "{{{ label }}}",
    'fields' => [
        [
            'name' => 'key',
            'label' => __('Meta key'),
            'type' => \Elementor\Controls_Manager::SELECT,
            'options' => $labels,
            'placeholder' => __('Meta key'),
            'default' => __('Meta key'),
        ]
    ],
]);

推荐阅读