WordPress как на ладони
wordpress jino

Автоматические, зависимые таксономии?

К примеру на сайте есть произвольные таксономии "Страна" и "Город",

как сделать:
что когда я на странице редактирования поставлю чекбокс в разделе "Город" - на значении Москва, то страна Россия поставится автоматически ??

Это облегчит работу очень сильно: к примеру создам главную таксономию персонажа мультфильма, а его остальные поля как ПОЛ, МУЛЬТФИЛЬМ, ПЕРВОЕ ПОЯВЛЕНИЕ, СИЛА заполнятся автоматически

Может есть какой-то плагин?

Очень удобно со знаменитостями к примеру - Выставил таксономию Ани Лорак, нажал обновить запись, а тут тебе автоматически поставились год рождения "1978" и страна "Украина"

НЕ ПОДХОДИТ:
Думал использовать просто описания к таксономиям (в примере со знаменитостями) и выводить по нужной категории в single.PHP, но тогда сортировка по городам и датам не будет работать.

Kama год назад

Непонятно, что конкретно есть и нужно...

kolshix год назад

Уже начал потихоньку разбираться, Вечером подумал и осенило:
1 Создам произвольные поля к таксономии (сделано)
2 Создам дополнительное поле редактирования в админ панели поста (назовем TAX)(есть наработки)
3 Буду в TAX отправлять инфу из доп полей таксономии (не умею, буду читать)
4 Уже TAX за меня будет заполнять нужные прописанные таксономии (не умею буду читать)

Пока все склипаю (знаний маловато), потом может выложу,

kolshix год назад

спасибо 80 % инфы на Вашем сайте раздобыл. Решение в ответе ниже...

0
kolshix182 год назад
  • 0
    kolshix182 cайт: paxtoy.com

    Разобрался на 95 % - код рабочий, решения взяты на сайте KAMA

    Остались вопросы:
    1 Этот код добавляет таксономии к посту, а какой удаляет?

    wp_set_post_terms( $post_id, $value, $key, true );

    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 === Автозаполнение  ===*/ 
    Kama год назад
    1. wp_remove_object_terms()

    2. Что конкретно не работает? Сорри разбираться устал...
    kolshix год назад

    Да не заморачивайтесь сильно - просто если по данному коду сделать автоматическое заполнение таксономии "TAGS" - все работает, на древовидных как "CATEGORY" - не работает

        wp_set_post_terms( $post_id, $value, $key, true );

    По id заполнение ещё не тестировал

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.