今天的问题是如何根据图片的URL获取attachment ID,WordPress的特色图像功能多好,很多主题就是不用啊,要用post meta存储thumbnail地址,这下换主题了,新主题用特色图像,为了不丢失之前的数据,只好用程序设置特色图像了。

代码

代码短短的,不会很头疼。下面代码的好处是,即使图片地址带有尺寸信息,也不影响

function get_attachment_id_from_src ($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 guid='$link'");
}

我接下来要干的是将这张图片设置成post的特色图像,需要代码如下

$attachment_id = get_attachment_id_from_src( $img_url );
set_post_thumbnail($post_id, $attachment_id);

这段代码在网上找的,本意是通过压缩尺寸的图片找到原图,好获取一张不同尺寸的图片。

//Get a different size image
    $attachment_id = get_attachment_id_from_src( $src );
    $medium_im = wp_get_attachment_image_src( $attachment_id, 'medium');
//wp_get_attachment_image_src() is a wordpress function that returns an array with {src, width,height}  info.
echo '<img src="'.$medium_im[0].'" alt="" width="'.$medium_im[1].'" height="'.$medium_im[2].'" />';

还好图片都上传到了媒体库中,不然还得先把图片下载,再上传、创建缩略图再保存为特色图像。

这就看出使用WordPress内置功能的好处了,换主题方便。使用插件的道理亦如此,现在越来越不喜欢把好多著名插件的功能都集成进来的主题了。

参考文章

Get the WordPress post attachment ID from an Image Src

3条留言

  1. $content = $post->post_content;
    $test = 正则已经获取了文章的第一个图片

    $attachment_id = get_attachment_id_from_src($test );
    $medium_im = wp_get_attachment_image_src( $attachment_id, ‘medium’);

    我用正则提取了正文的第一张图片
    因为第一张图片是原图, 我想根据这个原图返回这个图片的 缩略图? 可以吗?

    1. 应该可以,前提是这张图片是上传到媒体库的。
      我觉得直接用php脚本压缩图片更简单,比如https://github.com/bfintal/bfi_thumb

  2. 评论不让帖PHP代码?

评论功能已关闭