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

How to stop Wordpress scaling down big images? (-scaled.jpg)

当我从 Unsplash.com 插入新图像时,图像大小 "full" returns 名称文件末尾带有“-scaled.jpg”的缩放图像并且是始终限制为 2560 像素。那么我怎样才能检索图像的真实 "full" 大小呢?

您必须首先通过在 functions.php:

中添加这行代码来禁用 WordPress 5.3 中引入的这个“功能”
add_filter( 'big_image_size_threshold', '__return_false' );

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

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

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

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

您需要将以下代码放在 php 文件中,然后 run/call 从浏览器或终端中输入。不要忘记替换 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() );
}