Найти пост, к которому прикреплено вложение

1 мар. 2012 г., 17:54:44
Просмотры: 14K
Голосов: 5

У меня есть список ID вложений, который создается с помощью такого массива:

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

Можно ли взять ID изображения из этого списка и найти заголовок и постоянную ссылку на ПОСТ, к которому прикреплено это изображение?

Я знаю, что это возможно, так как Медиабиблиотека это отображает, но не могу найти правильный способ сделать это через кодекс.

Я пробовал этот код, однако он возвращает заголовок и ссылку на само вложение, а не на пост, к которому оно прикреплено:

$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);
1
Комментарии

Googlers: $attachment->post_parent - это ID записи, к которой прикреплено вложение.

rinogo rinogo
21 июн. 2017 г. 02:07:30
Все ответы на вопрос 3
1

Итак, если вы начинаете с этого:

$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 );
}
?>
1 мар. 2012 г. 18:07:57
Комментарии

Похоже, я слишком усложнял. Это сработало идеально!

Pat Pat
1 мар. 2012 г. 18:21:34
0

Переменная $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>";
1 мар. 2012 г. 18:17:08
2
-2

Мы можем просто использовать https://wordpress.org/plugins/find-posts-using-attachment/

Надеюсь, это лучший способ!

27 июн. 2016 г. 03:39:48
Комментарии

Объяснение того, что делает плагин и как он отвечает на вопрос, улучшит ваш ответ.

Gabriel Gabriel
27 июн. 2016 г. 04:10:33

Этот плагин добавляет новую колонку в таблицы медиафайлов и всех записей, где показывается, в каких материалах используется данное вложение.

magic-boy magic-boy
1 июл. 2016 г. 04:09:56