san_jorich
@san_jorich
Творческий кодер

Как лучше создать опцию плагина для правил условной логики?

Предыстория

Создается страница настроек условной логики показа содержимого файлов из заданной папки.

На данный момент скрипт работает так:
- заданная директория "forms" сканируется на php-файлы.
Каждый файл содержит в себе форму с набором всяких разных полей списков и тд
- Для каждого файла скриптом должна задаваться условная логика показа\подгрузки, которая формируется из списка термов двух таксономий: estate_operation и estate_type.
Таким образом получается, что мне нужно циклом формировать массив:
[путь до файла, id первой таксономии, id второй таксономии]
Количество файлов заранее не известно и может меняться.
Вопрос 1: Как лучше формировать массив опций, чтобы в дальнейшем максимально оперативно искать в нем совпадения по id таксономий. Как можно избежать сильной вложенности, не плодя при этом много сущностей ?
Вопрос 2: Как не ajax-ом+jQuery забирать в опцию выбранные термы из списка?
5bbf08e565b9b218573403.jpeg
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(){}

  • Вопрос задан
  • 22 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы