如何动态调整WordPress图像大小(自定义域/主题选项)

时间:2011-11-29 作者:Zach

因此,应客户要求,我需要能够调整图像大小,而不是标准的WordPress方式。。。而是从主题选项中提取的图像。我不能简单地使用custom\\u标题区域,因为将有两个或三个标题区域(一旦上传图像,我也有一些选项,让用户选择链接应该如何运行(页面、帖子、类别、无链接、外部链接等))。我正在使用Options Framework Theme 取得了巨大的成功,我可以很好地检索图像src,问题是这是否可以与通常用于后期缩略图的add\\u image\\u size()函数结合使用。我真的不想走timthumb路线,坚持使用WordPress API(我知道这与我一开始所做的有点矛盾……)。任何帮助都将不胜感激。谢谢

1 个回复
最合适的回答,由SO网友:Michael Ecklund 整理而成

Re-size WordPress images on the fly using built-in WordPress functions.

使用vt_resize 功能可动态调整位于自定义字段、特色图像、上载目录、NextGen Gallery WordPress插件中的WordPress图像的大小,甚至可以调整到非现场图像的外部链接的大小

它使用非常简单,只需将下面的代码复制/粘贴到WordPress主题中functions.php 当前激活的WordPress主题的文件。

然后,如果需要动态调整图像大小,只需按照函数注释中解释的参数用法调用该函数即可。

下面是一个自动获取帖子ID、帖子本身、帖子的自定义字段值的示例,以及从包含要动态调整大小的图像的自定义字段动态调整图像大小的示例。

<?php

# Place this in your functions.php
function get_postID() {

    global $wp_query;

    return $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. (alternatively, `global $post`)
$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 0. Meaning, will not use a Post Attachment.
# The second parameter is the image URL from 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 crop this image.

$resizedImage = vt_resize( 0, $image, 190, 338, true ); // Dynamically re-size 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.)

?>

Re-size WordPress images on the fly vt_resize with multi-site support

  • Description: 使用WordPress内置函数动态调整图像大小
  • Author: 维克托·泰泽拉Requirements: PHP 5.2+、WordPress 3.2+
我对源代码进行了重新格式化,以便于我自己阅读。如果您想要原始格式的源代码,请访问上面的链接。

<?php

if ( ! function_exists( \'vt_resize\' ) ) {

    /**
     * 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|void
     */
    function vt_resize( int $attach_id = 0, string $img_url = \'\', int $width = 0, int $height = 0, bool $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;
    }

}

?>

结束

相关推荐

fetch images and videos

是否可以获取特定网站的视频和图像并将其发布?我的意思是我正在考虑写一个函数,在这里我只写网站名称,然后在网站url的帮助下,所有或最新的图片和视频都会发布到我的帖子上。这可能吗?