web-dev-qa-db-fra.com

Comment changer la valeur spécifique de _wp_attachment_metadata dans SQL?

j'ai dû redimensionner beaucoup d'images existantes dans mon dossier de téléchargement (environ 1 Ko). Bien sûr, après leur remise en ligne, Wordpress ne reconnaît pas les nouvelles dimensions. Mon approche consistait simplement à modifier la taille dans la table _post_meta. Mais cela ressemble à ceci:

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

Tout ce que j'ai besoin de changer, c'est la valeur "width" de la première entrée de "330" à qc. autre. Bien que cela ressemble à un dictionnaire pour moi, je ne trouve pas un moyen d’avoir accès à cette valeur en SQL.

La référence wp_update_attachment_metadata indique que toutes les données doivent être fournies car les données existantes seront effacées. C'est la raison pour laquelle j'ai pensé qu'il serait plus facile de le faire en SQL.

1
Unfu

Vous pouvez le faire via PHP au lieu de SQL, récupérez simplement les métadonnées existantes et modifiez ce dont vous avez besoin, cela gérera la sérialisation pour vous:

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

Mais en réalité, vous feriez peut-être mieux d'utiliser le plugin Regenerate Thumbnails , qui peut résoudre ce problème et régénérer les différentes tailles de vignettes en même temps.

1
majick

Vous regardez PHP serialized data sauvegardé sous forme de chaîne dans la base de données MySQL. SQL n'aura tout simplement pas la moindre idée de ce qu'il faut en faire.

La chose la plus importante à retenir à propos des données sérialisées est qu’il n’est pas facile de les modifier. Il incorpore la longueur des valeurs dans le format et si les modifications ne correspondent pas à la longueur, l'ensemble des données est corrompu.

Donc, généralement, la méthode préférée pour manipuler de telles données est avec le code PHP.

Il existe notamment de nombreuses solutions pour reconstruire les données d'image (plugins, WP commande CLI) - mais il s'agit généralement de tailles supplémentaires, pas d'image d'origine. Je ne sais pas s'ils s'occuperaient de votre cas, mais vous pourriez essayer. Il suffit d’essayer d’abord pour ne pas aggraver la situation.

2
Rarst

Il existe un plug-in "Fix Media Library" qui met à jour le champ _wp_attachment_metadata dans le cadre de la régénération des vignettes.

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

0
WowPress.host

vous devez désérialiser cette chaîne, vous obtiendrez un tableau que vous pourrez éditer. Puis sérialisez à nouveau ce tableau.

$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