동적으로 WordPress 이미지 크기를 동적으로 조정하는 방법 (사용자 정의 필드 / 테마 옵션)


12

따라서 고객의 요청에 따라 표준 WordPress 방식이 아닌 테마 옵션에서 가져온 이미지의 이미지 크기를 조정할 수 있어야합니다. 나는 단순히 custom_header 영역을 사용할 수 없습니다. 두세 가지가있을 것입니다 (이미지가 업로드되면 사용자가 링크의 작동 방식을 선택할 수 있도록 몇 가지 옵션이 있습니다 (페이지, 게시물, 카테고리, 링크 없음, 외부 링크) 등)). 내가 사용 옵션 프레임 워크 테마를 큰 성공으로 내가 잘 이미지 SRC를 검색 할 수 있습니다,이 어떻게 든 일반적으로 포스트 썸네일에 사용되는 add_image_size () 함수와 함께 사용할 수 있는지의 문제이다. 나는 오히려 timthumb 경로를 따르지 않고 WordPress API를 고수하지 않을 것입니다 (처음에는 내가하고있는 일과 약간 모순된다는 것을 알고 있습니다 ...). 도움을 주시면 감사하겠습니다. 감사!


1
좋아-내가 이것을 달성했다고 생각합니다 : <?php $main_image = of_get_option('of_main_image'); $thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid = '$main_image'" ) ); $theID = $thepost->ID; echo wp_get_attachment_image( $theID, 'homepage_main' ); ?> 여기에 보안상의 허점이나 이상한 점이 있습니까? 다른 사람에게도 유용 할 수 있습니다. 감사!
Zach

'guid'는 이미지 URL이 저장되는 위치이므로 (옵션 프레임 워크는 WooThemes Media Uploader를 사용하여이 데이터를 첨부 파일 post_type으로 저장합니다) 다음과 같이 데이터에 액세스 할 수 있습니다.
Zach


1
완전성을 위해 이것을 추가했습니다. 다른 솔루션이 해를 끼치 지 않기 때문에 폐쇄해서는 안됩니다.
카이저

1
내가 만든 많은 웹 사이트 에서이 문제에 직면했습니다. 최적의 방식으로 작동하는 솔루션을 찾을 수 없으므로 내 플러그인을 만들었습니다! 이게 도움이 되길 바란다! wordpress.org/plugins/fly-dynamic-image-resizer
Junaid Bhura

답변:


6

내장 된 WordPress 기능을 사용하여 WordPress 이미지의 크기를 즉석에서 조정할 수 있습니다.

vt_resize기능을 사용하면 사용자 정의 필드, 추천 이미지, 업로드 디렉토리, NextGen Gallery WordPress 플러그인 또는 오프 사이트 이미지에 대한 외부 링크에있는 WordPress 이미지의 크기를 동적으로 조정할 수 있습니다.

사용하기 매우 간단합니다. 아래 코드를 복사 functions.php하여 현재 활성화 된 WordPress 테마 의 WordPress 테마 파일에 붙여 넣기 만하면 됩니다.

그런 다음, 즉시 이미지 크기를 조정해야하는 경우에는 기능 설명에 설명 된 매개 변수 사용법에 따라 해당 기능을 호출하십시오.

다음은 Post ID, Post 자체, Post의 사용자 정의 필드 값을 자동으로 가져오고 이미지를 포함하는 사용자 정의 필드에서 이미지를 동적으로 크기를 조정하여 동적으로 크기를 조정하는 예입니다.

<?php
// Place this in your functions.php 
function get_postID(){
    global $wp_query;
    $thePostID = $wp_query->post->ID;
}
?>

<?php
// Place the following lines where you want to perform this action.
$postID = get_postID();// Obtain the current Post ID.
$post = get_post($postID);// Takes the current Post ID and returns the database record.
$custom = get_post_custom($post->ID);// Returns a multidimensional array with all custom fields of the Post.
$image = $custom['field-slug'][0];// Specify the array key of the Custom Field containing the image.
// The first parameter is blank. Meaning, we will not be using a Post Attachment.
// The second parameter is the image from our Post's Custom Field value.
// The third and fourth parameters are the width and height of the image after the re-size is performed.
// The fifth parameter means we want to crop this image.
$resizedImage = vt_resize('', $image, 190, 338, true);// Dynamically re-size our image on the fly.
echo '<img src="'.$resizedImage[url].'" width="'.$resizedImage[width].'" height="'.$resizedImage[height].'" title="'.$post->post_title.'" alt="'.$post->post_title.'" />';// The image properties are held in an array. (Use print_r($resizedImage) for array properties.)
?>

다중 사이트를 지원하여 WordPress 이미지 크기를 즉시 조정

  • 설명 : WordPress 내장 기능을 사용하여 이미지 크기를 동적으로 조정합니다.
  • 콘텐츠 작가 : Victor Teixeira
  • 요구 사항 : PHP 5.2+, WordPress 3.2+

소스 코드를 다시 포맷하여 내 눈에 잘 보이도록했습니다. 원본 형식의 소스 코드를 원하면 위의 링크를 방문하십시오.

<?php
/*
* Resize images dynamically using wp built in functions
* Victor Teixeira
*
* php 5.2+
*
* Exemplo de uso:
*
* <?php
* $thumb = get_post_thumbnail_id();
* $image = vt_resize($thumb, '', 140, 110, true);
* ?>
* <img src="<?php echo $image[url]; ?>" width="<?php echo $image[width]; ?>" height="<?php echo $image[height]; ?>" />
*
* @param int $attach_id
* @param string $img_url
* @param int $width
* @param int $height
* @param bool $crop
* @return array
*/
if(!function_exists('vt_resize')){
    function vt_resize($attach_id = null, $img_url = null, $width, $height, $crop = false){
    if($attach_id){
        // this is an attachment, so we have the ID
        $image_src = wp_get_attachment_image_src($attach_id, 'full');
        $file_path = get_attached_file($attach_id);
    } elseif($img_url){
        // this is not an attachment, let's use the image url
        $file_path = parse_url($img_url);
        $file_path = $_SERVER['DOCUMENT_ROOT'].$file_path['path'];
        // Look for Multisite Path
        if(file_exists($file_path) === false){
            global $blog_id;
            $file_path = parse_url($img_url);
            if(preg_match('/files/', $file_path['path'])){
                $path = explode('/', $file_path['path']);
                foreach($path as $k => $v){
                    if($v == 'files'){
                        $path[$k-1] = 'wp-content/blogs.dir/'.$blog_id;
                    }
                }
                $path = implode('/', $path);
            }
            $file_path = $_SERVER['DOCUMENT_ROOT'].$path;
        }
        //$file_path = ltrim( $file_path['path'], '/' );
        //$file_path = rtrim( ABSPATH, '/' ).$file_path['path'];
        $orig_size = getimagesize($file_path);
        $image_src[0] = $img_url;
        $image_src[1] = $orig_size[0];
        $image_src[2] = $orig_size[1];
    }
    $file_info = pathinfo($file_path);
    // check if file exists
    $base_file = $file_info['dirname'].'/'.$file_info['filename'].'.'.$file_info['extension'];
    if(!file_exists($base_file))
    return;
    $extension = '.'. $file_info['extension'];
    // the image path without the extension
    $no_ext_path = $file_info['dirname'].'/'.$file_info['filename'];
    $cropped_img_path = $no_ext_path.'-'.$width.'x'.$height.$extension;
    // checking if the file size is larger than the target size
    // if it is smaller or the same size, stop right here and return
    if($image_src[1] > $width){
        // the file is larger, check if the resized version already exists (for $crop = true but will also work for $crop = false if the sizes match)
        if(file_exists($cropped_img_path)){
            $cropped_img_url = str_replace(basename($image_src[0]), basename($cropped_img_path), $image_src[0]);
            $vt_image = array(
                'url'   => $cropped_img_url,
                'width' => $width,
                'height'    => $height
            );
            return $vt_image;
        }
        // $crop = false or no height set
        if($crop == false OR !$height){
            // calculate the size proportionaly
            $proportional_size = wp_constrain_dimensions($image_src[1], $image_src[2], $width, $height);
            $resized_img_path = $no_ext_path.'-'.$proportional_size[0].'x'.$proportional_size[1].$extension;
            // checking if the file already exists
            if(file_exists($resized_img_path)){
                $resized_img_url = str_replace(basename($image_src[0]), basename($resized_img_path), $image_src[0]);
                $vt_image = array(
                    'url'   => $resized_img_url,
                    'width' => $proportional_size[0],
                    'height'    => $proportional_size[1]
                );
                return $vt_image;
            }
        }
        // check if image width is smaller than set width
        $img_size = getimagesize($file_path);
        if($img_size[0] <= $width) $width = $img_size[0];
            // Check if GD Library installed
            if(!function_exists('imagecreatetruecolor')){
                echo 'GD Library Error: imagecreatetruecolor does not exist - please contact your webhost and ask them to install the GD library';
                return;
            }
            // no cache files - let's finally resize it
            $new_img_path = image_resize($file_path, $width, $height, $crop);
            $new_img_size = getimagesize($new_img_path);
            $new_img = str_replace(basename($image_src[0]), basename($new_img_path), $image_src[0]);
            // resized output
            $vt_image = array(
                'url'   => $new_img,
                'width' => $new_img_size[0],
                'height'    => $new_img_size[1]
            );
            return $vt_image;
        }
        // default output - without resizing
        $vt_image = array(
            'url'   => $image_src[0],
            'width' => $width,
            'height'    => $height
        );
        return $vt_image;
    }
}
?>

Heres는 훨씬 간단 기능 (NO 멀티 사이트 지원,하지만하지 제정신 사용 다중 사이트에서 누군가?) github.com/BrettMW/img_resize
developerbmw

또한 @kaiser 의 링크와 같은 사용 가능한 솔루션 github.com/bueltge/WP-Image-Resizer
bueltge

@ bueltge, 작동하지만 이미지가 흐려지는 이유를 알고 있습니까? 모든 이미지를 150x150으로 만드는 것 같습니다. 왜 그런 일이 일어나는지 아십니까?
Ionut

@bueltge, 신경 쓰지 마세요. 문제를 찾았습니다. 사용할 때 크기를 두 번째 매개 변수로 최대로 설정해야했습니다wp_get_attachment_image_url()
Ionut

@bueltge, 그것을 긁어. 작동하지 않는 것 같습니다 ...이 문제를 도와 주시겠습니까? 이미지의 크기 full가 다르므로 이미지 크기를 추가하면
Ionut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.