【发布时间】:2020-04-18 06:26:33
【问题描述】:
当我从 Unsplash.com 插入新图像时,图像大小“完整”会返回一个缩放图像,名称文件末尾带有“-scaled.jpg”,并且始终限制为 2560 像素。那么如何才能检索到图像的真正“完整”尺寸呢?
【问题讨论】:
标签: wordpress image-size
当我从 Unsplash.com 插入新图像时,图像大小“完整”会返回一个缩放图像,名称文件末尾带有“-scaled.jpg”,并且始终限制为 2560 像素。那么如何才能检索到图像的真正“完整”尺寸呢?
【问题讨论】:
标签: wordpress image-size
您必须首先通过在您的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() );
}
【讨论】: