Est-il possible d'obtenir l'identifiant de pièce jointe par son nom? Et à la fois, il est peut-être possible d’obtenir un poste parent auquel cette pièce jointe est assignée?
Vous devez écrire un code personnalisé pour obtenir l'id de la pièce jointe et le post_parent par-nom / slug ou nom_fichier (s'il n'a pas été modifié lors du téléchargement de fichiers).
Mettez le code ci-dessous dans le fichier functions.php file
if( ! ( function_exists( 'wp_get_attachment_by_post_name' ) ) ) {
function wp_get_attachment_by_post_name( $post_name ) {
$args = array(
'posts_per_page' => 1,
'post_type' => 'attachment',
'name' => trim( $post_name ),
);
$get_attachment = new WP_Query( $args );
if ( ! $get_attachment || ! isset( $get_attachment->posts, $get_attachment->posts[0] ) ) {
return false;
}
return $get_attachment->posts[0];
}
}
alors vous pouvez appeler la fonction où vous en avez besoin comme ci-dessous: -
$attachment = wp_get_attachment_by_post_name( $post_name );
// Replace post_name by the name/slug of the attachment
// It will give you an object, which you can render like below to get the ID and post_parent
if ( $attachment ) {
echo $attachment->ID; // Gives the id of the attachment
echo $attachment->post_parent; // Gives the post_parent id
echo $attachment->post_title; // Gives the attachment title.
}
Une autre approche possible consiste à utiliser directement $ wpdb pour effectuer une requête SQL, dans la table posts, avec le titre de l'article recherché et avec post_type "attachment".
function get_attachment_url_by_title( $title ) {
global $wpdb;
$attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_title = '$title' AND post_type = 'attachment' ", OBJECT );
//print_r($attachments);
if ( $attachments ){
$attachment_url = $attachments[0]->guid;
}else{
return 'image-not-found';
}
return $attachment_url;
}
// usage:
get_attachment_url_by_title('your_image_title');
Gardez à l'esprit que ce code renverra la première pièce jointe avec ce titre.
function get_attachment_url_by_title( $title ) {
$attachment = get_page_by_title($title, OBJECT, 'attachment');
//print_r($attachment);
if ( $attachment ){
$attachment_url = $attachment->guid;
}else{
return 'image-not-found';
}
return $attachment_url;
}
echo get_attachment_url_by_title('your_image_title');
get_page_by_title()
fera l'affaire.
Avec une URL complète en tant que titre:
get_page_by_title( pathinfo( 'https://www.example.com/file.jpg' )['filename'], "OBJECT", 'attachment' );
Retourne WP_Post Object ou Null, si aucune publication/pièce jointe n'a été trouvée.
Base sur WordPress Codex ,
pièce jointe '- une pièce jointe. Alors que le post_status par défaut de WP_Query est 'publier', les pièces jointes ont un post_status par défaut de 'inherit'. Cela signifie qu'aucune pièce jointe ne sera renvoyée sauf si vous définissez explicitement post_status sur 'inherit' ou 'any'. (Voir post_status ci-dessous)