Trovare il post a cui è allegato un attachment

1 mar 2012, 17:54:44
Visualizzazioni: 14K
Voti: 5

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);
1
Commenti

Googler: $attachment->post_parent è l'ID del post a cui l'allegato è associato.

rinogo rinogo
21 giu 2017 02:07:30
Tutte le risposte alla domanda 3
1

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 );
}
?>
1 mar 2012 18:07:57
Commenti

Immagino di averci pensato troppo. Ha funzionato perfettamente!

Pat Pat
1 mar 2012 18:21:34
0

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>";
1 mar 2012 18:17:08
2
-2

Possiamo utilizzare semplicemente https://wordpress.org/plugins/find-posts-using-attachment/

Spero sia il modo migliore!

27 giu 2016 03:39:48
Commenti

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

Gabriel Gabriel
27 giu 2016 04:10:33

Questo plugin aggiunge una nuova colonna nelle tabelle della directory dei media e in tutti i post che utilizzano un allegato, mostrandoli al suo interno.

magic-boy magic-boy
1 lug 2016 04:09:56