web-dev-qa-db-ja.com

SQLで_wp_attachment_metadata固有の値を変更する方法?

私は自分のアップロードフォルダにあるたくさんの既存の画像をリサイズしなければなりませんでした(およそ1k)。それらを再アップロードした後、Wordpressは新しい次元を認識しません。私のアプローチは_post_metaテーブルのサイズを変更することでした。しかし、これはこのようになります:

a:6{s:5:"width";s:3:"330";s:6:"height";s:4:"1067";s:14:"hwstring_small";s:22:"height='96' width='29'";s:4:"file";s:22:"2012/03/2-IMG_1540.png";s:5:"sizes";a:3:{s:9:"thumbnail";a:3:{s:4:"file";s:21:"2-IMG_1540-56x183.png"; ...

変更する必要があるのは、最初のエントリの「幅」の値を「330」からsthに変更することだけです。そうでなければ。私にとっては辞書のように見えますが、SQLでその値にアクセスする方法が見つかりません。

Wp_update_attachment_metadata参照は、既存のデータが消去されるため、すべてのデータを指定する必要があることを示しています。これが、SQLで実行するほうが簡単だと思った理由です。

1
Unfu

SQLの代わりにPHPを使ってこれを行うことができます。既存のメタデータを取得し、必要なものを変更するだけで、シリアル化が自動的に処理されます。

$newwidth = '250'; // or whatever it is
$attachments = get_posts(array('post_type'=>'attachment');
foreach ($attachments as $attachment) {
    $id = $attachment->ID;
    $metadata = wp_get_attachment_metadata($id);
    $metadata['width'] = $newwidth;
    wp_update_attachment_metadata($id,$metadata);
}

しかし、実際には、 Regenerate Thumbnails Plugin を使用したほうがよい場合があります。これを修正すると同時に異なるサイズのサムネイルを再生成できます。

1
majick

あなたが見ているのはPHP シリアライズ MySQLデータベースに文字列として保存されたデータです。 SQLはそれをどうするかについての手がかりを全く持たないでしょう。

シリアル化されたデータについて覚えておくべき最も重要なことはそれが編集することが簡単ではないということです。値の長さがフォーマットに埋め込まれ、編集内容が長さと一致しないと、データ全体が破損します。

そのため、通常、このようなデータを操作するための推奨される方法はPHPコード自体を使用することです。

特に、画像データを再構築するための解決策は複数あります(プラグイン、WP CLIコマンド)が、元の画像ではなく、通常は追加サイズ用です。彼らがあなたの訴訟を処理するかどうか私にはわかりませんが、あなたは試すかもしれません。それがそれを悪化させないように、最初にテストするだけです。

2
Rarst

それをしている "Fix Media Library"プラグインがあります、それは親指再生の一部として_wp_attachment_metadataフィールドを更新します。

https://wordpress.org/plugins/wow-media-library-fix/ /

0
WowPress.host

この文字列のシリアル化を解除する必要があります。そうすれば編集可能な配列が得られます。その後、このアレイをもう一度シリアル化してください。

$attachment_data_array=unserialize('a:6{s:5:"width"; ...');
//change array values as you need 
//for example
$attachment_data_array['sizes']['thumbnail']['file']='newlink.jpg';
//then serialize again
$data=serialize($attachment_data_array);
0
Hatem Badawi