我尝试过类似答案的所有解决方案,但在Wordpress 5.0上似乎没有任何效果+
保存帖子时,我想将其特征图像设置为帖子内容中的第一个图像。
function auto_set_featured( $post_id, $post, $update ) {
$images = get_posts( array(
\'post_parent\' => $post_id,
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'posts_per_page\' => 1
) );
set_post_thumbnail( $post_id, $images[0]->ID );
}
add_action( \'save_post\', \'auto_set_featured\', 10, 3);
在中
set_post_thumbnail()
如果我手动设置图像id,它会工作,但似乎不会拾取
$images[0]->ID
我不知道为什么这不起作用。
注意:我正在测试内容中包含多个图像的帖子,所以$images
应返回数组。我还尝试使用$post->ID
和get_the_ID()
在查询中,它不起作用。我还尝试为手动添加帖子IDpost_parent
.
最合适的回答,由SO网友:Alexander Holsgrove 整理而成
您是否已在其他帖子中使用此图像?这个post_parent
可能已分配给与您所在职位不同的职位ID。你的代码只会首先返回上传到此帖子的图像。
我已经看到了一些针对这个问题的正则表达式类型的解决方案,但是我认为PHPs DOMDocument 可能更安全。这也是非常实验性的,但似乎对我有效:
function auto_set_featured($post_id, $post, $update ) {
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($post->post_content, LIBXML_NOWARNING);
libxml_clear_errors();
$images = $doc->getElementsByTagName(\'img\');
if($images->length > 0) {
$first_image = $images->item(0)->getAttribute(\'src\');
$attachment_id = attachment_url_to_postid($first_image);
if($attachment_id) {
set_post_thumbnail($post_id, $attachment_id);
}
}
}
应该足够简单,但它会加载帖子内容,并查找第一个
img
DomeElement。然后,我们将该图像URL用于
attachment_url_to_postid 要获取附件ID,请根据代码将其传递给set\\u post\\u缩略图。