如何阻止Wordpress缩小大图像? (-缩放.jpg)

问题描述 投票:0回答:3

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

wordpress image-size
3个回答
10
投票

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

add_filter( 'big_image_size_threshold', '__return_false' );

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

不幸的是,WordPress 团队再次证明了它的无能 - 他们没有提供任何功能来更新现有附件的 postmeta,并且显然他们没有给出任何有关此问题的信息......正如您所见 here,其中有数十个的人对这个所谓的功能表示愤怒

我今天创建了一个网站,其中包含数千个虚拟帖子,其中包含来自 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() );
}

2
投票

如上所述,默认情况下,如果原始文件大于 2560,则使用

-scaled.jpg
访问时,Wordpress 默认使用 2560
full
版本。但是,它保留了对可以使用此功能访问的原始未缩放文件的引用:

$original_url = wp_get_original_image_url($img_id);


0
投票

把这个: add_filter( 'big_image_size_threshold', '__return_false' ); 在你的 function.php 中

© www.soinside.com 2019 - 2024. All rights reserved.