Cách tự động thay đổi kích thước hình ảnh WordPress khi đang di chuyển (tùy chọn trường / chủ đề tùy chỉnh)


12

Vì vậy - theo yêu cầu của khách hàng, tôi cần có khả năng thay đổi kích thước hình ảnh không phải theo cách tiêu chuẩn của WordPress ... mà là từ hình ảnh được kéo vào từ một tùy chọn chủ đề. Tôi không thể đơn giản sử dụng vùng custom_header, vì sẽ có hai hoặc ba (Tôi cũng có một số tùy chọn sau khi hình ảnh được tải lên để cho phép người dùng chọn cách liên kết nên hoạt động (trang, bài đăng, danh mục, không liên kết, liên kết ngoài , Vân vân)). Tôi đang sử dụng Theme Framework Theme rất thành công và tôi có thể truy xuất src hình ảnh tốt, vấn đề là liệu điều này có thể được sử dụng bằng cách nào đó kết hợp với chức năng add_image_size () thường được sử dụng cho hình thu nhỏ của bài đăng. Tôi thực sự không muốn đi theo con đường thời gian và gắn bó với các API WordPress (Tôi biết điều đó hơi mâu thuẫn với những gì tôi đang làm ở nơi đầu tiên ...). Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn!


1
Ok - Tôi nghĩ rằng tôi có thể đã hoàn thành điều này: <?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' ); ?> Bất cứ ai cũng thấy bất kỳ lỗ hổng bảo mật hoặc kỳ lạ nào ở đây? Có thể hữu ích cho những người khác là tốt. Cảm ơn!
Zach

Vì 'hướng dẫn' là nơi URL hình ảnh được lưu trữ (Khung tùy chọn sử dụng Trình tải lên phương tiện WooTheme để lưu trữ dữ liệu này dưới dạng tệp đính kèm post_type) nên tôi có thể truy cập dữ liệu như vậy :)
Zach


1
Chỉ cần thêm điều này cho đầy đủ. Không nên đóng cửa, vì giải pháp khác sẽ không gây hại.
kaiser

1
Tôi đã phải đối mặt với vấn đề này trên rất nhiều trang web mà tôi đã xây dựng. Tôi không thể tìm thấy một giải pháp hoạt động theo cách tối ưu, vì vậy tôi đã xây dựng plugin của riêng mình! Tôi hi vọng cái này giúp được! wordpress.org/plugins/fly-dynamic-image-resizer
Junaid Bhura

Câu trả lời:


6

Kích thước lại hình ảnh WordPress một cách nhanh chóng bằng các chức năng WordPress tích hợp.

Sử dụng vt_resizechức năng để tự động thay đổi kích thước hình ảnh WordPress nằm trong trường tùy chỉnh, hình ảnh nổi bật, thư mục tải lên, plugin NextGen Gallery WordPress hoặc thậm chí là một liên kết bên ngoài đến hình ảnh bên ngoài.

Cách sử dụng rất đơn giản, chỉ cần sao chép / dán mã bên dưới vào functions.phptệp chủ đề WordPress của chủ đề WordPress hiện đang được kích hoạt của bạn.

Sau đó, bất cứ khi nào bạn cần thay đổi kích thước hình ảnh một cách nhanh chóng, chỉ cần thực hiện một cuộc gọi đến chức năng đó theo cách sử dụng tham số được giải thích trong các nhận xét của chức năng.

Dưới đây là một ví dụ về việc tự động nhận ID bài đăng, chính Bài đăng, giá trị Trường tùy chỉnh của Bài đăng và tự động thay đổi kích thước hình ảnh từ Trường tùy chỉnh có chứa hình ảnh để được kích hoạt lại một cách linh hoạt khi đang di chuyển.

<?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.)
?>

Kích thước lại hình ảnh WordPress khi đang bay vt_resize với sự hỗ trợ đa trang web

  • Mô tả: Kích thước lại hình ảnh một cách linh hoạt bằng cách sử dụng các hàm dựng sẵn của WordPress.
  • Tác giả: Victor Teixeira
  • Yêu cầu: PHP 5.2+, WordPress 3.2+

Tôi đã định dạng lại mã nguồn để nó dễ đọc hơn đối với mắt tôi. Nếu bạn muốn mã nguồn được định dạng ban đầu, hãy truy cập vào liên kết ở trên.

<?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;
    }
}
?>

Đây là một chức năng đơn giản hơn nhiều (không hỗ trợ nhiều trang web, nhưng có ai trong tâm trí của họ sử dụng đa trang web không?) Github.com/BrettMW/img_resize
developerbmw

Ngoài ra, một giải pháp có thể sử dụng sẵn github.com/bueltge/WP-Image-Resizer , như liên kết từ @kaiser
bueltge 1/10/2015

@bueltge, nó hoạt động, nhưng bạn có biết tại sao hình ảnh bị mờ không? Có vẻ như nó làm cho tất cả các hình ảnh 150x150. Bất cứ ý tưởng tại sao điều đó xảy ra?
Irika

@bueltge, đừng bận tâm. Tôi đã tìm thấy vấn đề. Tôi đã phải đặt kích thước thành đầy đủ như tham số thứ hai khi sử dụngwp_get_attachment_image_url()
Muff

@bueltge, gãi mà. Có vẻ như nó không hoạt động ... bạn có thể vui lòng giúp tôi với điều này? Khi tôi thêm kích thước fullhình ảnh như hình ảnh có kích thước khác nhau.
Iovy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.