• Всем привет в WP есть такая замечательная вещь как миниатюры, в настройках картинки её можно редактировать, менять размер обрезать и тд.
    После редактирования wp делает копию 3х размеров.

    Мой шаблон делает для слайдера собственную копию миниатюр

    if ( function_exists( 'add_theme_support' ) ) { // Added in 2.9
    	add_theme_support( 'post-thumbnails' );
    	add_image_size( 'flr_slider', 640, 220, true );
    	add_image_size( 'flr_home', 360, 150, true ); 
    
    }
    function flr_slider_image(){
    
    if ( has_post_thumbnail() ) {
    			 the_post_thumbnail( 'flr_slider', array('class' => 'slidim') );
    } else {?>
    
    	<img class="slidim" src="<?php bloginfo('template_directory'); ?>/images/place.jpg" alt=""  />
    <?php
    };
    }

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

    Прошу помогите с этим разобраться.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Основная миниатюра тоже используется в шаблоне? Если нет — как вариант, можно использовать в слайдере её (указав соответствующие размеры).

    При редактировании изображения есть три варианта для изменения:
    все размеры, миниатюра и все размеры, кроме миниатюры. Задачу можно рассмотреть с точки зрения большей гибкости в этом месте — на текущий момент нет возможности отредактировать конкретную копию.

    Можно написать предложение в багтрекер (на английском): http://core.trac.wordpress.org/.

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

    Редактор после обработки создаёт копию с новым именем

    $path = get_attached_file($post_id);
    	$path_parts = pathinfo52( $path );
    	$filename = $path_parts['filename'];
    	$suffix = time() . rand(100, 999);
    
    	if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE &&
    		isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) {
    
    		if ( 'thumbnail' == $target )
    			$new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}";
    		else
    			$new_path = $path;
    	} else {
    		while( true ) {
    			$filename = preg_replace( '/-e([0-9]+)$/', '', $filename );
    			$filename .= "-e{$suffix}";
    			$new_filename = "{$filename}.{$path_parts['extension']}";
    			$new_path = "{$path_parts['dirname']}/$new_filename";
    			if ( file_exists($new_path) )
    				$suffix++;
    			else
    				break;
    		}
    	}

    Генерит случайный суффикс так сказать.
    Но функция the_post_thumbnail берёт именно из оригинала.
    Вот это место

    function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) {
    	echo get_the_post_thumbnail( NULL, $size, $attr );
    }
    
    /**
     * Retrieve Post Thumbnail.
     *
     * @since 2.9.0
     *
     * @param int $post_id Optional. Post ID.
     * @param string $size Optional. Image size.  Defaults to 'thumbnail'.
     * @param string|array $attr Optional. Query string or array of attributes.
      */
    function get_the_post_thumbnail( $post_id = NULL, $size = 'post-thumbnail', $attr = '' ) {
    	global $id;
    	$post_id = ( NULL === $post_id ) ? $id : $post_id;
    	$post_thumbnail_id = get_post_thumbnail_id( $post_id );
    	$size = apply_filters( 'post_thumbnail_size', $size );
    	if ( $post_thumbnail_id ) {
    		do_action( 'begin_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size ); // for "Just In Time" filtering of all of wp_get_attachment_image()'s filters
    		$html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr );
    		do_action( 'end_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size );
    	} else {
    		$html = '';
    	}
    	return apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr );
    }
    
    ?>

    Увы не так хорошо владею английским как хотелось бы

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. Я имел в виду использование миниатюры уже после изменения.
    2. Воспроизвёл аналогичную ситуацию — если при редактировании картинки выбрать «Все размеры», то обновляется и flr_slider. Или нужно, чтобы обновлялась только эта копия, а другие оставались прежними?
    3. Почему-то при использовании
      the_post_thumbnail( 'flr_slider', array('class' => 'slidim') );

      выводится оригинал изображения, который затем масштабируется браузером с помощью атрибутов width и height, тогда как при

      the_post_thumbnail( array( 640, 200 ), array('class' => 'slidim') );

      также происходит масштабирование, однако выводится наиболее подходящая по размеру копия. Предполагаю, что пользовательские размеры задаются массивами, а строками — только стандартные thumbnail, medium, large и full.

Просмотр 3 ответов — с 1 по 3 (всего 3)

Тема «the_post_thumbnail после редактирования картинки image-edit.php» закрыта для новых ответов.