Encontrar el post al que está adjunto un archivo en WordPress
Tengo una lista de IDs de adjuntos que se crearon usando este array:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
¿Es posible tomar el ID de imagen de esta lista y encontrar el Título y el enlace permanente del POST al que está adjunta la imagen?
Sé que es factible porque la Biblioteca de Medios lo muestra, pero no encuentro la manera correcta de hacer esto con el codex.
He probado este código, pero devuelve el título y enlace del adjunto en sí, no del post al que está adjunto:
$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);

Entonces, si comienzas con esto:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
Luego $all_images
es un array de objetos. Itera a través de cada uno:
foreach ( $all_images as $image ) {}
Dentro de ese foreach, puedes usar los parámetros normales disponibles para el objeto $post
:
$image->ID
es el ID del post de adjunto$image->post_parent
es el ID del post padre del adjunto
Así que usemos eso para obtener lo que buscas, utilizando get_the_title()
y get_permalink()
:
// Obtener el ID del post padre
$parent_id = $image->post_parent;
// Obtener el título del post padre
$parent_title = get_the_title( $parent_id );
// Obtener el enlace permanente del post padre
$parent_permalink = get_permalink( $parent_id );
¡Eso es básicamente todo!
Juntándolo todo:
<?php
// Obtener todos los adjuntos de imágenes
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Iterar a través de todos los adjuntos de imágenes
foreach ( $all_images as $image ) {
// Obtener el ID del post padre
$parent_id = $image->post_parent;
// Obtener el título del post padre
$parent_title = get_the_title( $parent_id );
// Obtener el enlace permanente del post padre
$parent_permalink = get_permalink( $parent_id );
}
?>

La variable $images
es un array de objetos de post (adjuntos). Puedes usar wp_list_pluck
para extraer los IDs de sus padres en un array. (array_unique
y array_filter
eliminan los IDs duplicados y los IDs vacíos respectivamente - esto puede o no ser deseable).
Luego puedes iterar a través de los IDs y usar get_permalink
y get_the_title
para obtener el enlace permanente y el título 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>";

Podemos usar simplemente https://wordpress.org/plugins/find-posts-using-attachment/
¡Espero que sea la mejor manera!
