Предыстория
Создается страница настроек условной логики показа содержимого файлов из заданной папки.
На данный момент скрипт работает так:
- заданная директория "forms" сканируется на php-файлы.
Каждый файл содержит в себе форму с набором всяких разных полей списков и тд
- Для каждого файла скриптом должна задаваться условная логика показа\подгрузки, которая формируется из списка термов двух таксономий: estate_operation и estate_type.
Таким образом получается, что мне нужно циклом формировать массив:
[путь до файла, id первой таксономии, id второй таксономии]
Количество файлов заранее не известно и может меняться.
Вопрос 1: Как лучше формировать массив опций, чтобы в дальнейшем максимально оперативно искать в нем совпадения по id таксономий. Как можно избежать сильной вложенности, не плодя при этом много сущностей ?
Вопрос 2: Как не ajax-ом+jQuery забирать в опцию выбранные термы из списка?
PHP код$ae_conditional_logic_page = basename(__FILE__);
function ae_conditional_logic_options() {
global $ae_conditional_logic_page;
add_options_page( 'Условная логика форм', 'Условная логика форм ', 'manage_options', $ae_conditional_logic_page, 'ae_conditional_logic_option_page');
}
add_action('admin_menu', 'ae_conditional_logic_options');
// Возвратная функция
function ae_conditional_logic_option_page(){
global $ae_conditional_logic_page;
?><div class="wrap">
<h2>Условная логика Форм параметров объектов</h2><small>Для каждой из форм в дериктории "forms" укажите логику показа. Каждая форма должна быть в отдельном файле.</small>
<?php scan_forms();?>
<form method="post" enctype="multipart/form-data" action="options.php">
<?php
settings_fields('ae_conditional_logic_options');
do_settings_sections($ae_conditional_logic_page);
?>
<p class="submit">
<input type="submit" class="button-primary" value="<?php _e('Сохранить изменения') ?>" />
</p>
</form>
</div><?php
}
function scan_forms(){ ?>
<div class="container mt-2"><div class="row mb-1"><div class="col"><b>Название файла\формы</b></div><div class="col"><b>Операция</b></div><div class="col"><b>Тип недвижимости</b></div></div>
<?php
get_option('');
foreach ( glob( plugin_dir_path( __FILE__ )."../forms/*.php" ) as $file ){ ?>
<div class="row mb-1"><div class="col"><?php echo basename($file); ?></div><div class="col"><?php estate_operation_select(); ?></div><div class="col"><?php estate_type_select(); ?></div></div>
<?php } ?>
</div>
<?php
}
/* Функции вывода типов и таксономий */
function estate_operation_select(){
echo'<select id="estate_operation_select" needed="true" class="form-control">';
$terms = get_terms("estate_operation", 'orderby=count&hide_empty=0'); $count = count($terms);
if ($count > 0) { foreach ($terms as $term) {if ($term->parent != '0' ){$parent='';}else{$parent ='disabled';} echo '<option '.$parent.' value="' . $term->term_taxonomy_id . '">' . $term->name .' </option>'; } }
echo'</select>';
}
function estate_type_select(){
echo'<select id="estate_type_select" needed="true" class="form-control">';
$terms = get_terms("estate_type", 'orderby=count&hide_empty=0'); $count = count($terms);
if ($count > 0) { foreach ($terms as $term) { echo '<option value="' . $term->term_taxonomy_id .' '.selected(get_option('demo-select').'">' . $term->name . '</option>'; } }
echo'</select>';
}
/* -------------------------------- */
//function save_conditional_logic_option(){}