WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как добавить миниатюру к любой таксономии?

Сейчас пользуюсь простым самодельным полем таксономии и туда гружу адрес изображения и вывожу в нужном месте, но это муторно, встречал на просторах код который добавляет произвольное поле со стандартным загрузчиком изображений, сейчас не найду этот код, может кто знает.

ГЛАВНОЕ

  1. плагины не предлагать, на них алергия
  2. плагины кастум филед, не интересуют
  3. хочу отделбный код, так как его можно подстроить под себя и выставить нужные id
  4. способ получения адреса миниатюры по SLUG, описаный на этом сайте - не вариант - много лишних движений
  5. вариант вбивания адреса в описание таксономии - это аналог предыдущих вариантов - и тем более поле описание мне нужно для других целей

Интересует что-то подобное этому полю

РЕШЕНИЕ:

спустя 10 минут

о Великий гугл и позор яндексу

ВОТ все по полочкам https://pluginrepublic.com/adding-an-image-upload-field-to-categories/

Заметки к вопросу:
Kama 7.3 года назад

Ты пробовал код из этой статьи? Я тупо взял вставил его на тестовый сайт. Кнопки появились, а загрузка не работает - скриптов media не хватает на странице...

Он какой-то недоделанный, хотя вроде и грамотный. И скрипт вставляется на все страницы админки... Ну код - как обычно плагины пишут - мелочам внимание не уделено... Я уже не говорю, что он только для рубрик рассчитан, а как же другие таксы? А главное класс называется tax а не categorу smile

kolshix 7.3 года назад

я код вставлял , он у меня запустился и все заработало, но меня тоже смутило , что только для одной таксономии, все произошло как обычно , сначала установил, потом протестировал, пока думаю уйти от кода, всетаки в сторону плагин Taxonomy Thumbnail -

Сейчас у меня проблема с

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>

он конфликтует и не хочет работать с Taxonomy Thumbnail и "Rich Text Tags, Categories, and Taxonomies"
Taxonomy Thumbnail - доп поле миниатюры для таксономий
ich Text Tags, Categories, and Taxonomies - описание таксономии с кнопками как в редакторе постов

1
kolshix
7.3 года назад 779
  • 0
    Kama9616

    Смотри решение в этой моей статье: https://wp-kama.ru/id_7686/miniatyury-dlya-elemetov-taksonomij.html

    Что касается предложенного в сети кода. Изменил его:

    • Добавил поддержку любых таксономий. Для каких такс выводить картинку указывается в $for_taxes.
    • Поправил чтобы работало даже если скрипты медиа библиотеки не подключены. А это вроде часто бывает.
    • Добавил колонку с миниатюрами в таблицу элементов таксономии.
    • Сделал чтобы скрипт подключался только на нужных страницах админки.
    <?php
    
    /**
     * Добавляет возможность загружать изображения для элементов указанных таксономий - категории, метки.
     *
     * Получить ID картинки термина: $image_id = get_term_meta( $term_id, 'term_image_id', 1 );
     * Затем получить URL картинки: $image_url = wp_get_attachment_image_url( $image_id, 'thumbnail' );
     *
     * @Author: Kama
     *
     * @ver: 1.1
     */
    if( ! class_exists('Term_Meta_Image') ){
    
    	class Term_Meta_Image {
    
    		public $for_taxes = array('category', 'post_tag'); // для каких таксономий должен работать код
    
    		## Initialize the class and start calling our hooks and filters
    		public function __construct(){
    
    			foreach( $this->for_taxes as $taxname ){
    				add_action("{$taxname}_add_form_fields",   array( & $this, 'add_term_image' ),     10, 2 );
    				add_action("{$taxname}_edit_form_fields",  array( & $this, 'update_term_image' ),  10, 2 );
    				add_action("created_{$taxname}",           array( & $this, 'save_term_image' ),    10, 2 );
    				add_action("edited_{$taxname}",            array( & $this, 'updated_term_image' ), 10, 2 );
    
    				add_filter("manage_edit-{$taxname}_columns",  array( & $this, 'add_image_column' ) );
    				add_filter("manage_{$taxname}_custom_column", array( & $this, 'fill_image_column' ), 10, 3 );
    			}
    		}
    
    		## Add a form field in the new category page
    		public function add_term_image( $taxonomy ){
    			wp_enqueue_media(); // подключим стили медиа, если их нет
    
    			add_action('admin_print_footer_scripts', array( & $this, 'add_script' ), 99 );
    			?>
    			<div class="form-field term-group">
    				<label for="term_image_id">
    					<?php _e('Image', 'hero-theme'); ?>
    				</label>
    				<input type="hidden" id="term_image_id" name="term_image_id" class="custom_media_url" value="">
    				<div id="term__image__wrapper"></div>
    				<p>
    					<input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
    					<input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
    				</p>
    			</div>
    			<?php
    		}
    
    		## Edit the form field
    		public function update_term_image( $term, $taxonomy ){
    			wp_enqueue_media(); // подключим стили медиа, если их нет
    
    			add_action('admin_print_footer_scripts', array( & $this, 'add_script' ), 99 );
    
    			$image_id = get_term_meta( $term -> term_id, 'term_image_id', true );
    			?>
    			<tr class="form-field term-group-wrap">
    				<th scope="row">
    					<label for="term_image_id"><?php _e( 'Image', 'hero-theme' ); ?></label>
    				</th>
    				<td>
    					<input type="hidden" id="term_image_id" name="term_image_id" value="<?php echo $image_id; ?>">
    					<div id="term__image__wrapper">
    					 <?php if( $image_id ){
    							echo wp_get_attachment_image( $image_id, 'thumbnail' );
    						} ?>
    					</div>
    					<p>
    						<input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
    						<input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
    					</p>
    				</td>
    			</tr>
    			<?php
    		}
    
    		## Save the form field
    		public function save_term_image( $term_id, $tt_id ){
    			if( isset( $_POST['term_image_id'] ) && '' !== $_POST['term_image_id'] ){
    				$image = $_POST['term_image_id'];
    				add_term_meta( $term_id, 'term_image_id', $image, true );
    			}
    		}
    
    		## Update the form field value
    		public function updated_term_image( $term_id, $tt_id ){
    			if( isset( $_POST['term_image_id'] ) && '' !== $_POST['term_image_id'] ){
    				$image = $_POST['term_image_id'];
    				update_term_meta( $term_id, 'term_image_id', $image );
    			}
    			else
    				update_term_meta( $term_id, 'term_image_id', '' );
    		}
    
    		## Add script
    		public function add_script(){
    			// выходим если мы не на нужной странице таксономии
    			//$cs = get_current_screen();
    			//if( ! in_array($cs->base, array('edit-tags','term')) || ! in_array($cs->taxonomy, (array) $this->for_taxes) )
    			//  return;
    
    			?>
    			<script>
    			jQuery(document).ready( function($){
    				function ct_media_upload( button_class ){
    					var _custom_media = true,
    					_orig_send_attachment = wp.media.editor.send.attachment;
    
    					$('body').on('click', button_class, function(e){
    						var button_id           = '#'+$(this).attr('id');
    						var send_attachment_bkp = wp.media.editor.send.attachment;
    						var button              = $(button_id);
    
    						_custom_media = true;
    
    						wp.media.editor.send.attachment = function( props, attachment ){
    							if( _custom_media ){
    								$('#term_image_id').val(attachment.id);
    								$('#term__image__wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
    								$('#term__image__wrapper .custom_media_image').attr('src',attachment.sizes.thumbnail.url).css('display','block');
    							}
    							else {
    								return _orig_send_attachment.apply( button_id, [props, attachment] );
    							}
    						}
    						wp.media.editor.open(button);
    						return false;
    					});
    				}
    
    				ct_media_upload('.ct_tax_media_button.button');
    
    				$('body').on('click','.ct_tax_media_remove',function(){
    					$('#term_image_id').val('');
    					$('#term__image__wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
    				});
    
    				// Thanks: http://stackoverflow.com/questions/15281995/wordpress-create-category-ajax-response
    				$(document).ajaxComplete(function( event, xhr, settings ){
    					var queryStringArr = settings.data.split('&');
    
    					if( $.inArray('action=add-tag', queryStringArr) !== -1 ){
    						var xml = xhr.responseXML;
    						$response = $(xml).find('term_id').text();
    
    						if( $response != '' ){
    							$('#term__image__wrapper').html(''); // Clear the thumb image
    						}
    					}
    				});
    			});
    			</script>
    			<?php
    		}
    
    		## Добавляет колонкку картинки в таблицу терминов
    		public function add_image_column( $columns ){
    			// подправим ширину колонки через css
    			add_action('admin_notices', function(){
    				echo '<style>.column-image{ width:60px; text-align:center; }</style>';
    			});
    
    			$num = 1; // после какой по счету колонки вставлять новые
    
    			$new_columns = array( 'image'=>'Картинка' );
    
    			return array_slice( $columns, 0, $num ) + $new_columns + array_slice( $columns, $num );
    		}
    
    		public function fill_image_column( $string, $column_name, $term_id ){
    			// если есть картинка
    			if( $image_id = get_term_meta( $term_id, 'term_image_id', 1 ) ){
    				$string = '<img src="'. wp_get_attachment_image_url( $image_id, 'thumbnail' ) .'" width="40" height="40" alt="" />';
    			}
    
    			return $string;
    		}
    	}
    
    	new Term_Meta_Image(); // init
    
    }
    

    Подключается код в functions.php (начальную <?php нужно удалить в этом случае) или из него можно сделать плагин.

    kolshix 7.3 года назад

    начинаю потихоньку тестить ,

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