Автоматические, зависимые таксономии?
К примеру на сайте есть произвольные таксономии "Страна" и "Город",
как сделать:
что когда я на странице редактирования поставлю чекбокс в разделе "Город" - на значении Москва, то страна Россия поставится автоматически ??
Это облегчит работу очень сильно: к примеру создам главную таксономию персонажа мультфильма, а его остальные поля как ПОЛ, МУЛЬТФИЛЬМ, ПЕРВОЕ ПОЯВЛЕНИЕ, СИЛА заполнятся автоматически
Может есть какой-то плагин?
Очень удобно со знаменитостями к примеру - Выставил таксономию Ани Лорак, нажал обновить запись, а тут тебе автоматически поставились год рождения "1978" и страна "Украина"
НЕ ПОДХОДИТ:
Думал использовать просто описания к таксономиям (в примере со знаменитостями) и выводить по нужной категории в single.PHP, но тогда сортировка по городам и датам не будет работать.
Непонятно, что конкретно есть и нужно...
Уже начал потихоньку разбираться, Вечером подумал и осенило:
1 Создам произвольные поля к таксономии (сделано)
2 Создам дополнительное поле редактирования в админ панели поста (назовем TAX)(есть наработки)
3 Буду в TAX отправлять инфу из доп полей таксономии (не умею, буду читать)
4 Уже TAX за меня будет заполнять нужные прописанные таксономии (не умею буду читать)
Пока все склипаю (знаний маловато), потом может выложу,
спасибо 80 % инфы на Вашем сайте раздобыл. Решение в ответе ниже...
Разобрался на 95 % - код рабочий, решения взяты на сайте KAMA
Остались вопросы:
1 Этот код добавляет таксономии к посту, а какой удаляет?
2 Как быть с древовидной таксономией
вот весь код (не работает на древовидных таксономиях):
<?php /* END СОЗДАЕМ СВОИ ОТОБРАЖЕНИЯ ТАКСОНОМИИ в DESCRIPTION*/ $taxname = 'category'; // Поля при добавлении элемента таксономии add_action("{$taxname}_add_form_fields", 'add_new_custom_fields'); // Поля при редактировании элемента таксономии add_action("{$taxname}_edit_form_fields", 'edit_new_custom_fields'); // Сохранение при добавлении элемента таксономии add_action("create_{$taxname}", 'save_custom_taxonomy_meta'); // Сохранение при редактировании элемента таксономии add_action("edited_{$taxname}", 'save_custom_taxonomy_meta'); function edit_new_custom_fields( $term ) { ?> <tr class="form-field"> <th scope="row" valign="top"><label>Рождение</label></th> <td> <input type="text" name="extra[bornceleb]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'bornceleb', 1 ) ) ?>"><br /> <span class="description">Год рождения (bornceleb)</span> </td> </tr> <tr class="form-field"> <th scope="row" valign="top"><label>Страна рождения</label></th> <td> <input type="text" name="extra[countryceleb]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'countryceleb', 1 ) ) ?>"><br /> <span class="description">Место рождения (countryceleb)</span> </td> </tr> <?php } function add_new_custom_fields( $taxonomy_slug ){ ?> <div class="form-field"> <label for="tag-bornceleb">Рождение</label> <input name="extra[bornceleb]" id="tag-bornceleb" type="text" value="" /> <p>Год Рождения (bornceleb)</p> </div> <div class="form-field"> <label for="tag-countryceleb">Заголовок</label> <input name="extra[countryceleb]" id="tag-title" type="text" value="" /> <p>Место рождения (countryceleb)</p> </div> <?php } function save_custom_taxonomy_meta( $term_id ) { if ( ! isset($_POST['extra']) ) return; // Все ОК! Теперь, нужно сохранить/удалить данные $extra = array_map('trim', $_POST['extra']); foreach( $extra as $key => $value ){ if( empty($value) ){ delete_term_meta( $term_id, $key ); // удаляем поле если значение пустое continue; } update_term_meta( $term_id, $key, $value ); // add_term_meta() работает автоматически } return $term_id; } /* === Автозаполнение kolshix === */ // подключаем функцию активации мета блока (my_extra_fields) add_action('add_meta_boxes', 'my_extra_fields', 1); function my_extra_fields() { add_meta_box( 'extra_fields', 'Кол. файлов (have_files)', 'extra_fields_box_func', 'post', 'normal', 'high' ); } // код блока function extra_fields_box_func( $post ){ $post = get_post(); $categoryidd = get_the_category(); $categoryidd = $categoryidd[0]->cat_ID; $count_bornceleb = '' . get_term_meta( $categoryidd, 'bornceleb', true ); // получил информацию из произвольного поля (метополя) новой таксономии $count_countryceleb = '' . get_term_meta( $categoryidd, 'countryceleb', true ); ?> <p><label><input type="text" name="extra[bornceleb]" value="<?php echo $count_bornceleb; ?>" style="width:50%" /> (Год рождения) </label></p> <p><label><input type="text" name="extra[countryceleb]" value="<?php echo $count_countryceleb; ?>" style="width:50%" /> (Город Рождения) </label></p> <input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" /> <?php } // включаем обновление полей при сохранении add_action('save_post', 'my_extra_fields_update', 0); /* Сохраняем данные, при сохранении поста */ function my_extra_fields_update( $post_id ){ if ( !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false; // проверка if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false; // если это автосохранение if ( !current_user_can('edit_post', $post_id) ) return false; // если юзер не имеет право редактировать запись if( !isset($_POST['extra']) ) return false; // Все ОК! Теперь, нужно сохранить/удалить данные $_POST['extra'] = array_map('trim', $_POST['extra']); foreach( $_POST['extra'] as $key=>$value ){ if( empty($value) ){ delete_post_meta($post_id, $key); // удаляем поле если значение пустое continue; } // update_post_meta($post_id, $key, $value); // add_post_meta() работает автоматически wp_set_post_terms( $post_id, $value, $key, true ); } return $post_id; } /* END === Автозаполнение ===*/wp_remove_object_terms()
Да не заморачивайтесь сильно - просто если по данному коду сделать автоматическое заполнение таксономии "TAGS" - все работает, на древовидных как "CATEGORY" - не работает
По id заполнение ещё не тестировал