【问题标题】:How to stop Wordpress scaling down big images? (-scaled.jpg)如何阻止 Wordpress 缩小大图像? (-scaled.jpg)
【发布时间】:2020-04-18 06:26:33
【问题描述】:

当我从 Unsplash.com 插入新图像时,图像大小“完整”会返回一个缩放图像,名称文件末尾带有“-scaled.jpg”,并且始终限制为 2560 像素。那么如何才能检索到图像的真正“完整”尺寸呢?

【问题讨论】:

    标签: wordpress image-size


    【解决方案1】:

    您必须首先通过在您的functions.php中添加这行代码来禁用WordPress 5.3中引入的这个“功能”:

    add_filter( 'big_image_size_threshold', '__return_false' );
    

    这将禁用任何未来上传的缩小。但是对于现有图像,您必须更新图像大小。

    不幸的是,WordPress 团队再次证明了它的无能——他们没有提供任何功能来更新现有附件的 postmeta,而且显然他们没有给出任何关于这个问题的意见,如您所见 here, where dozens of people expressed there anger about this so called feature .

    我今天创建了一个网站,其中包含数千个虚拟帖子,其中包含来自 Unsplash.com 的精选图片,并且我需要完整大小的图片。运行下载和创建博客文章和附件文章的脚本需要几个小时。因此,一旦我发现了新的“功能”以及如何禁用它,我就无法删除所有帖子并再次运行虚拟脚本。

    所以我又写了一个脚本,这还是花了我很多时间......

    您需要将以下代码放在一个 php 文件中,然后从浏览器或终端运行/调用它。不要忘记替换 wp-load.php 文件的路径。在我的本地机器上,几千个附件帖子只需要几秒钟。

    <?php
    
    require_once( "/absolute/or/relative/path/to/wordpress/wp-load.php" );
    
    ini_set( 'max_execution_time', 3600 );
    set_time_limit( 3600 );
    
    $pdo = new PDO( "mysql:dbname=" . DB_NAME . ";host=" . DB_HOST, DB_USER, DB_PASSWORD );
    
    /**
     * replace _wp_attached_file meta_key
     **/
    
    global $wpdb;
    $wp_postmeta = $wpdb->prefix . "postmeta";
    
    try {
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );//Error Handling
    
        $sql    = "UPDATE $wp_postmeta SET meta_value = REPLACE(meta_value,'-scaled.jpg','.jpg') WHERE meta_key='_wp_attached_file' AND meta_value LIKE '%-scaled.jpg%'";
        $result = $pdo->exec( $sql );
        print_r( $result );
    
    } catch ( PDOException $e ) {
        print_r( $e->getMessage() );
    }
    
    
    /**
     * replace _wp_attachment_metadata meta_key
     **/
    
    $image_metas = [];
    try {
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );//Error Handling
        $sql         = "SELECT * FROM $wp_postmeta WHERE meta_value LIKE '%-scaled.jpg%' AND meta_key='_wp_attachment_metadata'";
        $statement   = $pdo->query( $sql );
        $image_metas = $statement->fetchAll();
        foreach ( $image_metas as $meta ) {
            $meta_value         = unserialize( $meta["meta_value"] );
            $file               = $meta_value["file"];
            $meta_value["file"] = str_replace( "-scaled.jpg", ".jpg", $file );
            update_post_meta( $meta["post_id"], $meta["meta_key"], $meta_value );
            $result = get_post_meta( $meta["post_id"], $meta["meta_key"] );
            print_r( $result );
        }
    } catch ( PDOException $e ) {
        print_r( $e->getMessage() );
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 2014-10-29
      • 2022-11-15
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多