如果我只有链接,我如何才能获得不同的图像大小?

时间:2012-01-19 作者:Joseph Silber

由于各种原因,我无法使用Wordpress的内置缩略图功能。

我想做的是使用帖子中的第一个图像作为缩略图。

以下是我在抄本中发现的内容:Show the first image associated with the post.

然而,问题是,如果帖子有多个图像,但帖子中的第一个图像实际上不是第一个上载的图像,那么最终会得到第二个图像,而不是第一个图像。

因此,我决定使用类似于this approach, 它使用正则表达式来解析the_content 找到第一个帖子。

这很好,但我最终得到了帖子中使用的图像大小,我只想要缩略图大小。

<小时>So, here\'s the question: 如果我有一个图片链接,有没有其他方法可以得到不同的尺寸?

似乎我需要的是以某种方式获取附件ID,以便我可以通过以下方式获取图像大小:

wp_get_attachment_link( $id, \'thumbnail\' );
问题是,how do I get an ID if all I have is the URL?

3 个回复
最合适的回答,由SO网友:Joseph Silber 整理而成

我决定使用这个,这是基于@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\'");
}
这要简洁得多(因为它不会跳过先移除扩展然后再将其添加回的循环),而且更准确(因为. 是转义的,查询区分大小写)。

SO网友:Andres Yanez

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;
}
Pathrsley积分:http://www.pathorsley.com/code/get-the-wordpress-post-attachment-id-from-an-image-src/

SO网友:kaiser

法典有时是有效的来源The Codex 是不是错了。。。

显示当前帖子的附件这是一个稍微修改过的例子。

<?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 首先获得ID最低的帖子。

这就是为什么这很聪明的原因:ID是一个接一个地给出的,所以第一篇上传的帖子的ID是最低的。

在上面的示例中,只需将最后一个函数与wp_get_attachment_link() 并将其保存在某个var中,以便以后重用。

结束