Как я могу получить другой размер изображения, если все, что у меня есть, это ссылка?

По разным причинам я не могу использовать встроенную функцию Thumbnail для WordPress.

Вместо этого я хочу использовать первое изображение в сообщении в виде миниатюры.

Вот что я нашел в кодексе: Покажите первое изображение, связанное с этим сообщением .

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


Итак, я решил использовать что-то похожее на этот подход , который использует регулярное выражение для синтаксического анализа the_content чтобы найти первое сообщение.

Это отлично работает, но в итоге я получил размер изображения, который использовался в сообщении, и мне нужен только размер Thumbnail.


Итак, вот вопрос: если у меня есть ссылка на образ, есть ли способ получить другой размер?

Кажется, мне нужно как-то получить идентификатор вложения, чтобы я мог получить размер изображения с помощью этого:

 wp_get_attachment_link( $id, 'thumbnail' ); 

Проблема в том, как получить идентификатор, если у меня есть URL-адрес ?

Я решил использовать это, основанное на ответе @ AndresYanez:

 function get_image_id_by_link($link) { global $wpdb; $link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link); return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid='$link'"); } 

Это намного более красноречиво (так как он не перескакивает через обручи, сначала удаляя расширение, а затем добавляя его обратно), и немного более точен (так как он экранирован и запрос чувствителен к регистру).

 function get_attachment_id_from_src ($src) { global $wpdb; $reg = "/-[0-9]+x[0-9]+?.(jpg|jpeg|png|gif)$/i"; $src1 = preg_replace($reg,'',$src); if($src1 != $src){ $ext = pathinfo($src, PATHINFO_EXTENSION); $src = $src1 . '.' .$ext; } $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$src'"; $id = $wpdb->get_var($query); return $id; } 

Кредиты для патологи: http://www.pathorsley.com/code/get-the-wordpress-post-attachment-id-from-an-image-src/

Кодекс является действительным источником

Иногда Кодекс не так уж и ошибается …

Показать вложения для текущего сообщения

Это немного измененный пример из Кодекса.

 <?php // Do this inside The Loop (where $post->ID is available). global $post; $args = array( 'post_type' => 'attachment' ,'numberposts' => 1 ,'post_status' => null ,'post_parent' => $post->ID ,'orderby' => 'ID' ,'order' => 'ASC' ); $attachments = get_posts( $args ); if ( $attachments ) { foreach ( $attachments as $attachment ) { echo apply_filters( 'the_title' , $attachment->post_title ); the_attachment_link( $attachment->ID , false ); } } ?> 

Будьте умны – используйте систему за системой

Изменения в примере Codex просты: numberposts установлены в 1, значение orderby – это ID и сортировка ASC чтобы сначала получить сообщение с самым низким идентификатором.

Итак, вот почему это умно : идентификаторы даются один за другим, поэтому первый загруженный пост будет иметь самый низкий идентификатор.

В приведенном выше примере вы можете просто обменять последнюю функцию с помощью wp_get_attachment_link() и сохранить ее в некотором var, который вы можете повторно использовать позже.