Найти пост, к которому прикреплено вложение
У меня есть список 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/
Надеюсь, это лучший способ!