首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >再生缺失_wp_attachment_metadata

再生缺失_wp_attachment_metadata
EN

WordPress Development用户
提问于 2019-02-27 19:52:19
回答 3查看 7.2K关注 0票数 3

出于某种原因,我的媒体库中的一些缩略图正在随机丢失。

我发现数据库中没有_wp_attachment_metadata,因为这些图片缺少缩略图。然而,这些文件存在于磁盘上--包括原始文件和“裁剪”大小。

<#>The这个问题的目的不是为了找出为什么会出现这种情况,而是为此编写了一个不同问题。<#>Again,在这种情况下,我只想修复症状,而我还没有找到病因。 我的目标是重建丢失的缩略图。 我已经尝试过的是:

  • 这个WP SE答案
  • 再生指甲插件:
    • 如果打开该特定图像的附件详细信息面板并按下“重新生成缩略图”按钮,将得到以下消息:“错误:无法加载此附件的元数据”。
    • 运行“为所有4028个附件重新生成缩略图”是有效的,但是它需要很长的时间( 4.000张图片需要1小时),即使打开了"Skip重新生成现有大小正确的缩略图“选项。

  • 固定我的岗位插件:显示一个表,在几秒钟内从0%到100%,但没有差别。
  • 修正媒体库插件:即使选择“重新生成附件元数据和缩略图”,每图像也需要1秒。它在非常大的图像上也有错误,所以对我来说,它处理了大约100个图像,然后停止。

我还遇到了下面的片段,它应该修复丢失的元数据,但是它没有按预期工作(请参阅后面的代码) /** * fix broken image metadata so that thumbs can be regenerated */ function fixImageMeta() { global $wpdb; $sql = " select ID from {$wpdb->posts} where post_type = 'attachment' and post_mime_type like 'image/%' "; $images = $wpdb->get_col($sql); foreach ($images as $id) { $meta = wp_get_attachment_metadata($id); if (!$meta) { $file = get_attached_file($id); if (!empty($file)) { $info = getimagesize($file); $meta = array ( 'width' => $info[0], 'height' => $info[1], 'hwstring_small' => "height='{$info[1]}' width='{$info[0]}'", 'file' => basename($file), 'sizes' => array(), // thumbnails etc. 'image_meta' => array(), // EXIF data ); update_post_meta($id, '_wp_attachment_metadata', $meta); } } } } (来源) 上面的代码修复了媒体库中丢失的缩略图,但有一些不一致之处: 对于以前正确的图像,未序列化的_wp_attachment_metadata: Array ( [width] => 700 [height] => 430 [file] => 2019/02/filename.png [sizes] => Array ( [thumbnail] => Array ( [file] => filename-150x150.png [width] => 150 [height] => 150 [mime-type] => image/png ) [medium] => Array ( [file] => filename-300x184.png [width] => 300 [height] => 184 [mime-type] => image/png ) ) [image_meta] => Array ( [aperture] => 0 [credit] => [camera] => [caption] => [created_timestamp] => 0 [copyright] => [focal_length] => 0 [iso] => 0 [shutter_speed] => 0 [title] => [orientation] => 0 [keywords] => Array ( ) ) ) “固定”图像的非序列化_wp_attachment_metadata: Array ( [width] => 700 [height] => 430 [hwstring_small] => height='430' width='700' [file] => filename.png [sizes] => Array ( ) [image_meta] => Array ( ) )

EN

回答 3

WordPress Development用户

回答已采纳

发布于 2019-02-27 19:52:19

使用wp media regenerate命令参数从WP运行--only-missing非常快(对于4000个图像大约需要30秒),并正确地重新构建_wp_attachment_metadata

wp media regenerate --only-missing

票数 6
EN

WordPress Development用户

发布于 2021-03-04 04:12:25

上面有一些不工作的链接,所以如果有人在2021年(特别是在移动WP之后)仍在努力解决这个问题,我在这里找到了一个解决方案:

https://barebones.dev/articles/rebuild-meta-data-for-media-items-that-are-missing-it/

为将来保存原始源,但我必须删除元查询才能正常工作。(几百个附件花了很长时间,所以考虑构建一个计数器,并在前端执行一些限制器,因为限制posts_per_page不能很好地工作,除非您按兰特订购,运行很多次,但这不是一个好主意:)

代码语言:javascript
运行
复制
require_once('wp-load.php');
if ( ! function_exists( 'wp_crop_image' ) ) {
    include( ABSPATH . 'wp-admin/includes/image.php' );
}

$attachments = get_posts(
[
    'post_type' => 'attachment',
    'posts_per_page' => -1,
    'fields' => 'ids',
    'meta_query' => [
        [
            'key' => '_wp_attachment_metadata',
            'compare' => 'NOT EXISTS'
        ]
    ]
]
);

foreach($attachments as $attachment_id)
{

    $url = get_attached_file($attachment_id);

    if (strpos($url, '.svg') !== false) continue;

    $attach_data = wp_generate_attachment_metadata($attachment_id, $url);
    wp_update_attachment_metadata( $attachment_id,  $attach_data );

}
票数 1
EN

WordPress Development用户

发布于 2019-03-06 15:31:44

你的网站真正的问题是“我的媒体库的缩略图正在随机丢失”,这是你首先应该尝试修复的。你在你的信息中给出了一个提示,为什么会发生这样的事情:“它在非常大的图像上也会出错”。这是因为当when服务器试图为您的图像构建缩略图时,它就会从RAM中消失。潜在的其他图像在它的边缘被转换,因此它们随机失败。

您需要升级您的托管计划或使用/上载较小的图像。

票数 -2
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/330174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档