web-dev-qa-db-ja.com

WP 3.4に写真データがありません

私はWP3.4にアップデートしたところ、以前利用可能だった画像はもはやシステムによって "発見"されていないことを発見しました。これにより、すべての画像ファイルがオンラインでアクセス可能なままになりますが、WPはサムネイルデータを失い、その後メディアライブラリリストに標準メディアアイコンが表示されます。画像があるはずの表面ページには、URLがないので(ソースをチェックした)一般的な "image missing"アイコンが表示されています。

データベースと画像リストの関係がどういうわけか壊れていて、違いを見つけるためにそれらをリバースエンジニアリングしようとしています。うまくいけば、似たような問題を抱えた他の人がいるでしょうか。

2
MechEngineer

問題を解決したので、この質問を更新したいと思います。この問題は、以前のバージョンのWPがメディアのアップロード時に_wp_attached_fileメタキーを含まないことに起因しています。これは現在3.4で必要とされているようです。

以下はPHPで、データベースをループ処理し、キーファイルとイメージファイルの両方が存在することを確認してからデータベースを更新することができます。

// descend through the database
$updated = 0;
$skipped = 0;
$error = 0;
$upload_dir = wp_upload_dir();

$sql = sprintf("select * from %s where post_type = 'attachment'", $wpdb->posts);
$all_attachments = $wpdb->get_results($sql);

foreach ($all_attachments as $attachment) {
    // get the meta value
    $meta = get_post_meta($attachment->ID, "_wp_attachment_metadata", true);
    $file = $meta['file'];

    // verify that the file exists
    $file_path = $upload_dir['basedir'] . '/' . $file;
    if (!file_exists($file_path)) {
        $error++;
    }
    else {
        // add the meta value, which returns false if it already exists
        $adding_meta = add_post_meta($attachment->ID, '_wp_attached_file', $file, true);
        if ($adding_meta)
            $updated++;
        else
            $skipped++;
    }
}
echo '<div id="message" class="updated"><p>' . sprintf("%d attachments were updated, %d were skipped and %d had errors.", $updated, $skipped, $error) . '</p></div>';
1
MechEngineer