Question

Au cours de convertir un blog de Blogger à WP et exécution d'un script pour saisir des images à chaud liées pour l'hébergement, je me suis retrouvé avec quelques images géniaux noms comme

act%252Bapandas-210x290.png

Ces noms d'image empêchent l'image d'afficher sur une page Web, en raison de l'encodage d'URL se retrouver dans le nom du fichier lui-même (ne demandez pas!). Je les rebaptisa sur le serveur de fichiers, pas de prob, mais les noms sont également dans les métadonnées de fixation pour chaque poste.

Comment puis-je supprimer le « % » de toutes les références d'image dans la table wp_postmeta? * La plupart d'entre eux se produisent dans des tableaux sérialisés dans meta_values ??pour les meta_keys de _wp_attachment_metadata *. Je n'ai pas eu de chance de trouver un plug-in, et je suis pas sûr comment instituer un pur SQL / PHP solution.

Voici un exemple d'une entrée de tableau sérialisé (plus gommée par le plugin Smush.it, ugh):

a:7:{s:5:"width";s:3:"210";s:6:"height";s:3:"339";s:14:"hwstring_small";s:22:"height='96' width='59'";s:4:"file";s:27:"2011/02/act%252Bapandas.png";s:5:"sizes";a:6:{s:9:"thumbnail";a:4:{s:4:"file";s:27:"act%252Bapandas-210x290.png";s:5:"width";s:3:"210";s:6:"height";s:3:"290";s:10:"wp_smushit";s:271:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x290.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x290.png)";}s:14:"soft-thumbnail";a:4:{s:4:"file";s:27:"act%252Bapandas-179x290.png";s:5:"width";s:3:"179";s:6:"height";s:3:"290";s:10:"wp_smushit";s:271:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-179x290.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-179x290.png)";}s:14:"mini-thumbnail";a:4:{s:4:"file";s:25:"act%252Bapandas-60x60.png";s:5:"width";s:2:"60";s:6:"height";s:2:"60";s:10:"wp_smushit";s:267:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-60x60.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-60x60.png)";}s:5:"slide";a:4:{s:4:"file";s:27:"act%252Bapandas-210x290.png";s:5:"width";s:3:"210";s:6:"height";s:3:"290";s:10:"wp_smushit";s:271:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x290.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x290.png)";}s:10:"soft-slide";a:4:{s:4:"file";s:27:"act%252Bapandas-179x290.png";s:5:"width";s:3:"179";s:6:"height";s:3:"290";s:10:"wp_smushit";s:271:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-179x290.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-179x290.png)";}s:10:"mini-slide";a:4:{s:4:"file";s:27:"act%252Bapandas-210x145.png";s:5:"width";s:3:"210";s:6:"height";s:3:"145";s:10:"wp_smushit";s:271:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x145.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas-210x145.png)";}}s:10:"image_meta";a:10:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";}s:10:"wp_smushit";s:255:"Smush.it error: Could not get the image while processing http://new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas.png (/home/xxxxxxxxx/new.xxxxx.com/wp-content/uploads/2011/02/act%252Bapandas.png)";}

La question est en train de changer ou enlever le « % » le caractère et la mise à jour du tableau il indique le nombre correct de caractères (ie les s: 13 indiquerait yoursite.com est 13 char []) Je suis aussi ouvert à l'aide une solution php! Tout ce qui peut me aider à résoudre ce gâchis.

SOLUTION FINALE

Voir ma réponse ci-dessous.

Était-ce utile?

La solution

idée générale serait de boucle à travers toutes les pièces jointes pour récupérer, modifier et écrire de nouveau leur méta.

Quelque chose comme ça (test à fond avant d'utiliser sur quelque chose d'important):

$posts = get_posts(array(
    'post_type' => 'attachment',
    'numberposts' => -1,
));

foreach( $posts as $post ) {

    // retrieve data, unserialized automatically
    $meta = get_post_meta($post->ID,'_wp_attachment_metadata', true);

    // do stuff with $meta array

    // write it back
    update_post_meta($post->ID, '_wp_attachment_metadata', $meta);
}

Autres conseils

  $posts = get_posts(array(
                'post_type' => 'attachment',
                'numberposts' => -1,
            ));

    // Recursive String Replace - recursive_array_replace(mixed, mixed, array);
    function recursive_array_replace($find, $replace, $array){
    if (!is_array($array)) {
    return str_replace($find, $replace, $array);
    }
    $newArray = array();
    foreach ($array as $key => $value) {
    $newArray[$key] = recursive_array_replace($find, $replace, $value);
    }
    return $newArray;
    }

    foreach ($posts as $post) {
        // retrieve data, unserialized automatically
        $meta = get_post_meta($post->ID, '_wp_attachment_metadata', true);
        // see if file name has "%" in it
        if (strpos($meta[file], "%")) {
        //recursively scrub "%"
        $meta = recursive_array_replace('%', '', $meta);
        }

        // write it back
        update_post_meta($post->ID, '_wp_attachment_metadata', $meta);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top