Trovare il post a cui è allegato un attachment
Ho una lista di ID di attachment che ho creato usando questo array:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
È possibile prendere l'ID dell'immagine da questa lista e trovare il Titolo e il permalink del POST a cui l'immagine è allegata?
So che è fattibile perché la Libreria Media lo mostra, ma non riesco a trovare il modo giusto per farlo con il codex.
Ho provato questo codice, tuttavia restituisce il titolo e il permalink dell'attachment stesso, non del post a cui è allegato:
$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);
Quindi, se inizi con questo:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
Allora $all_images
è un array di oggetti. Scorri ciascuno di essi:
foreach ( $all_images as $image ) {}
All'interno di quel foreach, puoi utilizzare i parametri normali disponibili per l'oggetto $post
:
$image->ID
è l'ID del post di allegato$image->post_parent
è l'ID del post genitore del post di allegato
Quindi, usiamolo per ottenere ciò che ti serve, utilizzando get_the_title()
e get_permalink()
:
// Ottieni l'ID del post genitore
$parent_id = $image->post_parent;
// Ottieni il titolo del post genitore
$parent_title = get_the_title( $parent_id );
// Ottieni il permalink del post genitore
$parent_permalink = get_permalink( $parent_id );
Questo è praticamente tutto!
Mettendo tutto insieme:
<?php
// Ottieni tutti gli allegati immagine
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Scorri tutti gli allegati immagine
foreach ( $all_images as $image ) {
// Ottieni l'ID del post genitore
$parent_id = $image->post_parent;
// Ottieni il titolo del post genitore
$parent_title = get_the_title( $parent_id );
// Ottieni il permalink del post genitore
$parent_permalink = get_permalink( $parent_id );
}
?>

La variabile $images
è un array di oggetti post (allegati). Puoi utilizzare wp_list_pluck
per estrarre gli ID dei loro genitori in un array. (array_unique
e array_filter
rimuovono rispettivamente gli ID duplicati e quelli vuoti - questo potrebbe essere o meno desiderabile).
Puoi quindi iterare attraverso gli ID e utilizzare get_permalink
e get_the_title
per ottenere il permalink e il titolo del post:
$images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
$parents = array_filter(wp_list_pluck($images,'post_parent'));
$parents = array_unique($parents);
echo "<ul>";
foreach ($parents as $id){
echo "<li><a href='".get_permalink($id)."' >".get_the_title($id)."</a></li>";
}
echo "</ul>";

Possiamo utilizzare semplicemente https://wordpress.org/plugins/find-posts-using-attachment/
Spero sia il modo migliore!

Spiegare cosa fa il plugin e come risponde alla domanda migliorerebbe la tua risposta.
