web-dev-qa-db-fra.com

Styling des images provenant d'un autre blog

J'avais posé une question plus tôt, sur obtenir des post-vignettes d'un autre site WP . Là, le génial Mike a codé une requête SQL dont les résultats sont ensuite transmis à un tableau PHP. Le morceau de code de cette réponse que je veux modifier est le suivant.

$post_urls = $wpdb->get_col($sql);
  if (is_array($post_urls))
    echo implode("\n",$post_urls);

Le tableau contient maintenant des valeurs sous la forme <img src="/link/to/image.jpg"/>. Maintenant, comment puis-je ..

  1. Appelez la fonction WP image_resize sur chaque URL d'image?
  2. Appliquer ma propre classe CSS à chaque image?

UPDATE:

Merci à Jan pour les astuces sur l’optimisation de la requête SQL. Maintenant, le tableau $post_urls ne contiendra que les URL simples des images. Quelqu'un peut-il me montrer comment parcourir en boucle chaque URL du tableau et ajouter des préfixes (comme <img src=") et des suffixes (comme " class="awesome-image"/>) à chacun d'eux?

1
GPX

Il serait difficile d'appeler image_resize(), car cela permettrait de rechercher l'image dans le répertoire de téléchargement de votre blog principal. S'il s'agit d'une taille d'image fixe, je l'ajouterais simplement à la configuration de votre photoblog. Elle est donc créée à cet endroit lorsque vous téléchargez de nouvelles images (vous pouvez ensuite reconstruire vos anciennes vignettes d'image ).

Dans la réponse de Mike, vous voyez qu'il ajoute les parties <img src=" et "/> dans la requête SQL. C'est bien, mais vous n'avez pas à le faire. Si vous laissez cela, vous n'obtenez que l'URL de l'image et vous pouvez tout ajouter ultérieurement en PHP. J'ai écrit une version alternative qui vous fournira plus d'informations brutes pour jouer.

$attachment_data_list = $wpdb->get_results( $sql );
if ( $attachment_data_list ) {
    foreach ( $attachment_data_list as $attachment_data ) {
        echo '<img src="/mysubblog/wp-content/uploads/';
        echo $attachment_data->upload_relative_path;
        echo '"/>';
    }
}
3
Jan Fabry

Je dois avouer que je ne sais pas vraiment s'il est judicieux d'utiliser le pouvoir de WP image_resice sur les images liées HTTP. Je formulerais probablement une question supplémentaire pour en savoir plus sur les besoins. Probablement quelque chose comme:

Comment puis-je afficher une version plus petite d'une image que j'ai liée dans une balise HTML IMG?

Quant au reste de la magie de PHP, il s’agit probablement de ce que vous demandez. J'ai trouvé cette ancienne formule magique qui devrait correspondre à la magie selon le livre dans lequel je l'ai trouvée:

<?php
function doing_magic_on($my_very_specific_formatted_string, $my_own_css_class, $magic = 'bGlzdCgkc3RhcnQsICR1cmwsICRlbmQpID0gZXhwbG9kZSgnIicsICRteV92ZXJ5X3NwZWNpZmljX2Zvcm1hdHRlZF9zdHJpbmcpOw0KcmV0dXJuIHNwcmludGYoJyVzJXMiIGNsYXNzPSIlcyVzJywgJHN0YXJ0LCAkdXJsLCAkbXlfb3duX2Nzc19jbGFzcywgJGVuZCk7DQo=') {
    return eval(base64_decode($magic));
}

Puisse la force être avec vous et bonne chance pour améliorer vos compétences magiques pour l'avenir!

3
hakre

Si vous souhaitez redimensionner l'image, vous devez la télécharger à partir du serveur Web, puis l'écrire sur le disque. La fonction ci-dessous devrait faire l'affaire. L'image est ensuite stockée sur le disque dur local. C’est beaucoup plus convivial que de charger les vignettes depuis un autre site.

function http_image_writer($imgSrc, $filepath) {

  if(isset($imgSrc)) {

    //getting the image dimensions
    list($width, $height) = getimagesize($imgSrc);

    //saving the image into memory
    //the file has to be a jpg file or it will fail.
    //Use the other imagecreate functions for other formats.
    $myImage = imagecreatefromjpeg($imgSrc);

    // Creating the thumbnail
    $file = imagecreatetruecolor($width, $height);
    imagecopyresampled($file, $myImage, 0,0,0,0, $width, $height, $width, $height);

    //final output of the image file
    imagejpeg($file,$filepath);

    //cleanup of the images in memory
    imagedestroy($file);
    imagedestroy($myImage);
  }
}

puisque cette fonction utilise Gd, vous pouvez simplement y ajouter du code de redimensionnement. Il existe de nombreux exemples pour cela.

2
Patriek