- 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, и вернуть все идентификаторы. Может ли кто-нибудь помочь или показать мне другой способ решения этой проблемы?
#изображения #галерея