Галерея — Получите Все Идентификаторы Изображений Из Медиа-Библиотеки.

  • Автор темы Red dwarf
  • Обновлено
  • 21, Oct 2024
  • #1

Я новичок в PHP и считаю, что это довольно простой вопрос. Я потратил часы на поиск ответа, но, похоже, не совсем понял. Поэтому любая помощь будет оценена по достоинству.

Я пытаюсь создать на своем сайте страницу галереи, которая автоматически включает в себя все недавно загруженные изображения. Мой конечный план — использовать Justified Image Grid в качестве менеджера галереи. Для этого необходимо поместить идентификатор изображения в короткий код JIG. На моей странице шаблона я хочу в первую очередь получить идентификаторы всех изображений из медиа-библиотеки. 2-й — вызовите короткий код JIG и вставьте идентификаторы в качестве изображений галереи. Оттуда я настрою фильтрацию внутри JIG.

Насколько я понимаю, я не могу получить идентификаторы изображений непосредственно из WordPress. Мне нужно сначала получить их URL-адреса, а затем извлечь их идентификаторы. Если есть более эффективный способ сделать это, пожалуйста, дайте мне знать.

На данный момент у меня есть этот код для получения всех URL-адресов изображений (из этого обсуждения: Получить все изображения в медиагалерее?):

 
 function pn_get_attachment_id_from_url( $attachment_url = '' ) {

global $wpdb;
$attachment_id = false;

// If there is no url, return.
if ( '' == $attachment_url )

return;

// Get the upload directory paths
$upload_dir_paths = wp_upload_dir();

// Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image
if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {

// If this is the URL of an auto-generated thumbnail, get the URL of the original image

$attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );

// Remove the upload path base directory from the attachment URL

$attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );

// Finally, run a custom database query to get the attachment ID from the modified attachment URL

$attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) );

}

return $attachment_id;
}
 

Это отлично работает, когда я печатаю массив.

Далее у меня есть этот код для возврата идентификатора изображения из URL (из https://philipnewcomer.net/2012/11/get-the-attachment-id-from-an-image-url-in-wordpress/):

$query_images_args = array( 'post_type' => 'attachment', 'post_mime_type' =>'image', 'post_status' => 'inherit', 'posts_per_page' => -1, ); $query_images = new WP_Query( $query_images_args ); $images = array(); foreach ( $query_images->posts as $image) { $images[]= wp_get_attachment_url( $image->ID ); }

Это отлично работает для одного URL. Чего я не могу понять, так это как перебрать все URL-адреса, возвращаемые массивом $images, и вернуть все идентификаторы. Может ли кто-нибудь помочь или показать мне другой способ решения этой проблемы?

#изображения #галерея

Red dwarf


Рег
22 Mar, 2013

Тем
75

Постов
198

Баллов
593
  • 25, Oct 2024
  • #2

Насколько я понимаю, я не могу получить идентификаторы изображений напрямую из

 
 Array
(

[0] => 3299

[1] => 3298

[2] => 3297

[3] => 3266

[4] => 3265

[5] => 3260

[6] => 3259

[7] => 3258

[8] => 3257
)
 

вордпресс. Мне нужно сначала получить их URL-адреса, а затем извлечь их идентификаторы. $images should contain the ID's of all the images.

$ids = get_posts( array( 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => 'inherit', 'posts_per_page' => -1, 'fields' => 'ids', ) ); $images = array(); foreach ( $ids as $id ) $images[]= $id; print_r( $images );
 

Евгения 93


Рег
21 Apr, 2012

Тем
85

Постов
187

Баллов
662
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно