it-swarm.com.de

Wie kann ich den _wp_attachment_metadata-spezifischen Wert in SQL ändern?

ich musste die Größe vieler vorhandener Bilder in meinem Upload-Ordner ändern (ca. 1 KB). Nach dem erneuten Hochladen erkennt Wordpress die neuen Dimensionen natürlich nicht. Mein Ansatz war es, einfach die Größe in der _post_meta-Tabelle zu ändern. Das sieht aber so aus:

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"; ...

Alles, was ich ändern muss, ist der "width" -Wert des ersten Eintrags von "330" auf etw. sonst. Obwohl es für mich wie ein Wörterbuch aussieht, kann ich in SQL nicht auf diesen Wert zugreifen.

Die Referenz wp_update_attachment_metadata gibt an, dass alle Daten angegeben werden müssen, da vorhandene Daten gelöscht werden. Das ist der Grund, warum ich dachte, es wäre einfacher, es in SQL zu tun.

1
Unfu

Sie können dies über PHP anstelle von SQL tun. Rufen Sie einfach die vorhandenen Metadaten ab und ändern Sie, was Sie benötigen. Die Serialisierung wird für Sie erledigt:

$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);
}

Aber in Wirklichkeit können Sie besser das Regenerate Thumbnails Plugin verwenden, das dies behebt und gleichzeitig die verschiedenen Thumbnail-Größen regeneriert.

1
majick

Was Sie sehen, sind PHP serialisierte Daten, die als String in der MySQL-Datenbank gespeichert sind. SQL hat einfach keine Ahnung, was damit zu tun ist.

Das Wichtigste, an das Sie sich bei serialisierten Daten erinnern sollten, ist, dass die Bearbeitung nicht trivial ist. Die Länge der Werte wird in das Format eingebettet, und wenn die Bearbeitungen nicht mit der Länge übereinstimmen, werden die gesamten Daten beschädigt.

Die bevorzugte Methode zur Manipulation solcher Daten ist daher in der Regel PHP Code.

Insbesondere gibt es mehrere Lösungen, um die Bilddaten neu zu erstellen (Plugins, WP CLI-Befehl), in der Regel jedoch für zusätzliche Größen, nicht für Originalbilder. Ich bin mir nicht sicher, ob sie Ihren Fall behandeln würden, aber Sie könnten es versuchen. Testen Sie es einfach zuerst, damit es nicht noch schlimmer wird.

2
Rarst

Das Plugin "Medienbibliothek reparieren" aktualisiert das Feld _wp_attachment_metadata als Teil der Daumenregeneration.

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

0
WowPress.host

sie müssen diesen String unserialisieren, dann erhalten Sie ein Array, das Sie bearbeiten können. Serialisieren Sie dann dieses Array erneut.

$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