WordPress Customizer - передача значения настройки в другой элемент управления для динамического обновления выпадающего списка
В скрипте WordPress Customizer я пытаюсь передать значение из элемента управления select в пользовательский элемент управления, который отображает таксономии, связанные с выбранным значением (первый элемент управления).
$wp_customize->add_control( new Tax_Dropdown_Control( $wp_customize, 'select_tax', array(
'section' => 'section_1',
'label' => __( 'Выберите таксономию записи', 'textdomain' ),
'description' => __( 'Выберите таксономию на основе выбранного типа записи.', 'textdomain' ),
'dropdown_args' => array(
'post_type' => $wp_customize->get_setting("select_post_type"), // здесь нужно передать значение из первого элемента управления
),
) ) );
// фрагмент кода пользовательского элемента управления
class Tax_Dropdown_Control extends WP_Customize_Control {
.....
$dropdown_args = wp_parse_args( $this->dropdown_args, array(
'post_type' => 'post',
) );
$dropdown_args['echo'] = false;
$taxonomies = get_object_taxonomies($dropdown_args);
if ($taxonomies) {
echo '<select>';
foreach ($taxonomies as $taxonomy ) {
echo '<option>'. $taxonomy. '</option>';
}
echo '</select>';
}
....
}
Необходимо, чтобы варианты выбора обновлялись динамически при изменении выбранного типа записи. Не уверен, можно ли использовать active_callback
для повторного вызова функции с обновленной переменной?

Вы можете использовать JavaScript для захвата выбранной опции и затем сделать Ajax-запрос к REST API, чтобы получить соответствующие записи и обновить второе поле.

Кастомайзер работает полностью на стороне клиента, поэтому для получения нового списка таксономий потребуется AJAX-запрос к REST API. Это выполнимо, но довольно сложно. Более простое, но менее элегантное решение — просто включить все выпадающие списки и управлять их отображением. Таким образом, внутри цикла по всем возможным выпадающим спискам у вас будет такой код:
foreach [ возможные выпадающие списки ] {
....
if ($taxonomies) {
echo '<select id="' . $taxonomies . '">';
foreach ($taxonomies as $taxonomy ) {
echo '<option>'. $taxonomy. '</option>';
}
echo '</select>';
}
}
Это приведёт к такому html
:
<select id="tax1">
<option>...</option>
<option>...</option>
</select>
...
<select id="tax5">
<option>...</option>
<option>...</option>
</select>
Затем вы можете использовать id
у select
, чтобы применить CSS для переключения отображения. Очевидно, вам не нужен такой некрасивый html
на рабочем сайте, поэтому следует использовать is_customize_preview
, чтобы убедиться, что этот код генерируется только при активном кастомайзере.
