Вопрос или проблема
У меня есть список 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.