web-dev-qa-db-fra.com

Comment recadrer une image à partir d'une image src dans une taille spécifique

J'ai obtenu l'image src de l'entrée de l'utilisateur par un champ metabox. Maintenant, je veux rendre cette image dans une taille spécifique. Tout comme une image WordPress recadrée dans une taille spécifique.

J'ai essayé d'obtenir l'ID de l'image du src, puis j'ai utilisé la fonction ci-dessous pour obtenir l'image src avec une image de taille.

<?php
$img_id = get_image_id($img_src);
$sized_img_src = wp_get_attachment_image_src($img_id, 'image_size');

Et voici la fonction get_image_id():

function get_image_id($image_url) {
global $wpdb;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
return $attachment[0];
}

En fait, je ne reçois pas les identifiants d'images pour les images téléchargées avec cette fonction. Où est le problème?

4
Eh Jewel

WordPress a une fonction uniquement conçue à cet effet. La attachment_url_to_postid() vous permet de récupérer l'identifiant d'une pièce jointe à partir de son URL, que vous pourrez ensuite utiliser pour obtenir l'identifiant de la publication ultérieurement.

Si vous voulez le faire en écrivant une requête MySQL, je préférerais cependant suggérer de chercher le nom du fichier dans meta_value à la place:

$basename = basename ($image_url);
$sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = '$basename '";
$id = $wpdb->get_var($sql);

Les colonnes GUID sont codées en dur dans la base de données une fois que vous avez publié un article. Donc, si vous publiez un article sur localhost, un exemple de GUID ressemblera à ceci:

http://localhost/wp-content/uploads/my-image.jpg

Mais vous chercherez une online URL de votre image en utilisant ceci:

$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));

Ce qui ne retournera rien, évidemment. Cependant, vous pouvez utiliser LIKE avec le nom de base:

$img_name = basename ($image_url);
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid LIKE '%s';", $img_name ));

Ce qui est un peu la même chose que la première approche.

3
Jack Johansson