我需要从帖子中取出第一张图片,并将其设置为特色图片

时间:2017-09-19 作者:Von

有几个贴子和插件很接近,但并不完全如此。我正在将200多篇博客帖子迁移到一个新网站。所有帖子中至少有一张图片。新网站正在利用“特色图片”,而旧网站没有。

所以我需要一种方法来自动浏览所有帖子,删除帖子中找到的第一张图片,并将其设置为特色图片。

我找到的大多数解决方案都会将第一张图片即时作为特色图片,但我需要将其从帖子中完全删除,并将其永久设置为特色图片。

1 个回复
最合适的回答,由SO网友:WebElaine 整理而成

要开始,请执行以下操作:

将你的目标分解成更小的任务将有助于你弄清楚如何做到这一点。您可能想:

执行自定义查询以查找所有已发布的帖子使用foreach 循环查询结果,在循环中查找第一幅图像,将第一幅图像设置为特色图像(另存为Posteta)

  • 从该帖子的内容中删除该图像。您应该能够自己计算出#1和#2。对于#3,您可以在foreach 将识别第一个<img> 标记-但是你要确保你的帖子中只有来自这个网站的图片,因为它会抓取任何<img> 因此,如果您嵌入了来自其他站点的图像,那么您必须使regex更加复杂,才能从您自己的域中找到第一个图像。此代码假定您已将查询结果保存到名为$item:

    // get the full content of the post
    $content = $item->get_content();
    // find the first <img> tag and save to variable $imageUrl
    preg_match(\'/< *img[^>]*src *= *["\\\']?([^"\\\']*)/i\', $content, $imageUrl);
    // [1] is just the image URL. [0] is most but not all of the <img> tag.
    $imageUrl = $imageUrl[1];
    
    现在您已经有了图像的URL,您需要对附件ID进行反向工程,以便您可以将该附件ID指定为帖子的特色图像。Pippin 有一个很好的小功能来完成这部分:

    function pippin_get_image_id($image_url) {
        global $wpdb;
        $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=\'%s\';", $image_url )); 
            return $attachment[0]; 
    }
    
    将此函数置于循环上方或下方,而不是循环内部,然后在设置$imageUrl:

    $imageId = pippin_get_image_id($imageUrl);

    以下是setting the featured image programmatically.

    希望这会指引你走上正确的道路。稍微玩玩一下,如果你被某个特定的部分卡住了,你可以回来发布一个关于该部分的更具体的问题。

  • 结束

    相关推荐