Найти пост, к которому прикреплено вложение
У меня есть список ID вложений, который создается с помощью такого массива:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
Можно ли взять ID изображения из этого списка и найти заголовок и постоянную ссылку на ПОСТ, к которому прикреплено это изображение?
Я знаю, что это возможно, так как Медиабиблиотека это отображает, но не могу найти правильный способ сделать это через кодекс.
Я пробовал этот код, однако он возвращает заголовок и ссылку на само вложение, а не на пост, к которому оно прикреплено:
$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);

Итак, если вы начинаете с этого:
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
Тогда $all_images
— это массив объектов. Перебираем каждый:
foreach ( $all_images as $image ) {}
Внутри этого цикла foreach вы можете использовать стандартные параметры объекта $post
:
$image->ID
— это ID записи вложения$image->post_parent
— это ID родительской записи для вложения
Итак, давайте используем это, чтобы получить то, что вам нужно, с помощью функций get_the_title()
и get_permalink()
:
// Получаем ID родительской записи
$parent_id = $image->post_parent;
// Получаем заголовок родительской записи
$parent_title = get_the_title( $parent_id );
// Получаем постоянную ссылку на родительскую запись
$parent_permalink = get_permalink( $parent_id );
Вот и всё!
Собираем всё вместе:
<?php
// Получаем все вложения-изображения
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Перебираем все вложения-изображения
foreach ( $all_images as $image ) {
// Получаем ID родительской записи
$parent_id = $image->post_parent;
// Получаем заголовок родительской записи
$parent_title = get_the_title( $parent_id );
// Получаем постоянную ссылку на родительскую запись
$parent_permalink = get_permalink( $parent_id );
}
?>

Переменная $images
представляет собой массив объектов записей (вложений). Вы можете использовать функцию wp_list_pluck
для извлечения ID их родительских записей в массив. (Функции array_unique
и array_filter
удаляют дублирующиеся ID и пустые ID соответственно — это может быть или не быть желательным).
Затем вы можете пройтись в цикле по этим ID и использовать функции get_permalink
и get_the_title
для получения постоянной ссылки и заголовка записи:
$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>";

Мы можем просто использовать https://wordpress.org/plugins/find-posts-using-attachment/
Надеюсь, это лучший способ!
