要开始,请执行以下操作:
将你的目标分解成更小的任务将有助于你弄清楚如何做到这一点。您可能想:
执行自定义查询以查找所有已发布的帖子使用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.希望这会指引你走上正确的道路。稍微玩玩一下,如果你被某个特定的部分卡住了,你可以回来发布一个关于该部分的更具体的问题。