web-dev-qa-db-fra.com

Trouver le message auquel une pièce jointe est attachée

J'ai une liste d'ID de pièces jointes construites à l'aide de ce tableau:

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

Est-il possible de prendre l'ID d'image de cette liste et de rechercher le titre et le lien permanent du POST auquel l'image est attachée?

Je sais que c'est faisable parce que la médiathèque le montre, mais je ne trouve pas la bonne façon de procéder avec le codex.

J'ai essayé ce code, mais il retourne le titre et le lien permanent vers la pièce jointe elle-même, et non le message auquel il est attaché:

$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);
4
Pat

Donc, si vous commencez par ceci:

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

Alors $all_images est un tableau de objets . Parcourez chacun d'eux:

foreach ( $all_images as $image ) {}

À l'intérieur de chaque for, vous pouvez utiliser les paramètres normaux disponibles pour l'objet $post:

  • $image->ID est l'ID de la pièce jointe
  • $image->post_parent est l'ID de la pièce jointe post parent post

Donc, utilisons cela pour obtenir ce que vous recherchez, en utilisant get_the_title() et get_permalink() :

// Get the parent post ID
$parent_id = $image->post_parent;
// Get the parent post Title
$parent_title = get_the_title( $parent_id );
// Get the parent post permalink
$parent_permalink = get_permalink( $parent_id );

C'est à peu près ça!

Mettre tous ensemble:

<?php
// Get all image attachments
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Step through all image attachments
foreach ( $all_images as $image ) {
    // Get the parent post ID
    $parent_id = $image->post_parent;
    // Get the parent post Title
    $parent_title = get_the_title( $parent_id );
    // Get the parent post permalink
    $parent_permalink = get_permalink( $parent_id );
}
?>
4
Chip Bennett

Le $images est un tableau d'objets postaux (pièces jointes). Vous pouvez utiliser wp_list_pluck pour extraire l'ID de leur parent dans un tableau. (array_unique et array_filter suppriment les identifiants en double et les identifiants vides respectivement - cela peut ne pas être souhaitable).

Vous pouvez les parcourir en boucle et utiliser get_permalink et get_the_title pour obtenir le permalien et le titre de l'article:

$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>";
2
Stephen Harris