如何从Wordpress帖子中的第一张图片中获取自动缩略图?

时间:2013-03-24 22:05:42

标签: php wordpress

我正在创建一个Wordpress主题,我想抓住帖子中的第一张图片作为缩略图,用于Facebook的OG元标记。

我尝试使用函数get_the_post_thumbnail(),但它会生成一个html img元素。另外,我想在帖子中拍摄第一张图片,而无需在创建帖子时添加精选图片。

这应该很简单,因为已经为每个帖子生成了所有缩略图,我只是没有做对。

5 个答案:

答案 0 :(得分:4)

在这里,我为你做了一些功能,你可以挂钩添加/编辑附件事件。

function set_first_as_featured($attachment_ID){
    $post_ID = get_post($attachment_ID)->post_parent;
    if(!has_post_thumbnail($post_ID)){
        set_post_thumbnail($post_ID, $attachment_ID);
    }
}

add_action('add_attachment', 'set_first_as_featured');
add_action('edit_attachment', 'set_first_as_featured');

还有很多需要改进的空间,但这个也很有魅力。在每个上传/编辑附件上,功能检查帖子是否已有特色图片。如果没有,则将有问题的图像设置为特色。每个下一张图片都会被忽略(因为帖子已经有特色图片)。

也许有人觉得它很有用(你在我的编码中找到了解决方案,所以...... :))

答案 1 :(得分:2)

我找到了这个解决方案:

$size = 'thumbnail'; // whatever size you want
if ( has_post_thumbnail() ) {
    the_post_thumbnail( $size );
} else {
    $attachments = get_children( array(
        'post_parent' => get_the_ID(),
        'post_status' => 'inherit',
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'order' => 'ASC',
        'orderby' => 'menu_order ID',
        'numberposts' => 1)
    );
    foreach ( $attachments as $thumb_id => $attachment ) {
        echo wp_get_attachment_image($thumb_id, $size);
    }
}

答案 2 :(得分:0)

我找到了解决方案:

 wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'thumbnail' )[0];

工作正常。

答案 3 :(得分:0)

将此代码放入主题的functions.php:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension;
}

然后在WordPress循环中添加以下代码:

// make the first image of WordPress post as featured image
function first_image_as_featured() {
global $post, $posts;
$first_img_featured = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img_featured = $matches [1] [0];
if(empty($first_img_featured)){ //Defines a default image
$first_img_featured = "/images/default.jpg";
}
return $first_img_featured;
}

如果未设置特色图像,它将自动将第一张图像作为特色图像。 资料来源:Get The First Image Of WordPress Post As Featured Image

答案 4 :(得分:0)

我尝试了以上解决方案,但没有成功。因此,我构建了一个新的简单解决方案:

function set_first_as_featured($post_id){
    $medias = get_attached_media( 'image', $post_id );
    if(!has_post_thumbnail($post_id)) {
        foreach ($medias as $media) {
            set_post_thumbnail($post_id, $media->ID);
            break;
        }
    }
}
add_action('save_post', 'set_first_as_featured');

保存帖子时,此代码将检查其是否有缩略图。如果没有,那么它将把附加到该帖子的第一张图片设置为缩略图。