WordPress将特色图像设置为帖子的第一张图像

时间:2019-04-26 作者:CyberJ

我尝试过类似答案的所有解决方案,但在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->IDget_the_ID() 在查询中,它不起作用。我还尝试为手动添加帖子IDpost_parent.

1 个回复
最合适的回答,由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缩略图。

相关推荐

EDIT-Comments.php COMMENT_ROW_ACTIONS AJAX问题

在编辑注释上。php页面,我正在连接到comment\\u row\\u actions过滤器,以便在末尾添加另一个链接。我正在复制“Approve”链接,添加另一个查询键和值,并修改锚文本。我想根据新查询键的值添加一些注释元。批准的链接:/wp-admin/comment.php?c=9999&action=approvecomment&_wpnonce=8526c66已批准的元链接/wp-admin/comment.php?c=9999&action=approvecommen