Найдите пост, к которому прикреплен файл.

Вопрос или проблема

У меня есть список 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/

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

Ответ или решение

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

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

Шаг 1: Получаем массив вложений

Сначала необходимо получить все вложения (attachments), как это сделано в примере кода:

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

Теперь у нас есть массив объектов, представляющих вложения — каждое из которых содержит информацию о своем родительском посте.

Шаг 2: Извлекаем информацию о родительском посте

Для каждого вложения вы можете получить ID родительского поста с помощью свойства $image->post_parent. Далее, используя функции get_the_title() и get_permalink(), можно извлечь заголовок и URL родительского поста.

Вот как это будет выглядеть в коде:

foreach ($all_images as $image) {
    // Получаем ID родительского поста
    $parent_id = $image->post_parent;

    // Если $parent_id не пустой, продолжаем
    if ($parent_id) {
        // Получаем заголовок родительского поста
        $parent_title = get_the_title($parent_id);

        // Получаем постоянную ссылку на родительский пост
        $parent_permalink = get_permalink($parent_id);

        // Выводим информацию
        echo "<div>";
        echo "<h2><a href='{$parent_permalink}'>{$parent_title}</a></h2>";
        echo "</div>";
    }
}

Шаг 3: Оптимизация Google для SEO

Для повышения видимости вашего сайта в поисковых системах рекомендуется использовать эффективные теги заголовков и метаописания. Поскольку мы выводим заголовки постов с их ссылками, важно корректно формировать HTML и привлекать внимание пользователей.

Примечание о производительности

Если у вас есть много вложений, возможно, стоит оптимизировать код, чтобы избежать повторного извлечения имени и ссылки для одних и тех же постов. Вы можете создать массив уникальных ID родительских постов и затем выполнять извлечение заголовков и ссылок только для них:

$parents = array_unique(array_filter(wp_list_pluck($all_images, 'post_parent')));

foreach ($parents as $id) {
    echo "<li><a href='" . get_permalink($id) . "'>" . get_the_title($id) . "</a></li>";
}

Заключение

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

Убедитесь, что ваш код хорошо структурирован и оптимизирован для производительности и удобства пользователей, чтобы он соответствовал современным стандартам SEO.

Оцените материал
Добавить комментарий

Капча загружается...