如何从帖子中获取第一张图片?

时间:2014-02-23 22:07:57

标签: php wordpress content-management-system

我从这个代码发布第一张图片:

function first_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content,    $matches);
$first_img = $matches [1] [0];

if(empty($first_img)){
$images = array(
     'white5px.jpg',
 );
$image  = $images[array_rand($images)];
$first_img = "/wp-content/themes/tabs/images/" . $image . "";
}
return $first_img;}
?>

<img src="<?php echo first_image() ?>"title="<?php the_title(); ?>" alt="<?php the_title(); ?>"/>

一切正常,除非我使用galery - 图像未显示。 实例:http://beardhouse.com.ua/?cat=2为什么它不起作用以及如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

  

一切正常,除非我使用画廊 - 图像不是   显示。

图库不会作为完整的img标记存储在帖子正文中,这正是您的正则表达式所代表的内容。图库将作为短代码保存到帖子正文中,该代码在显示时处理并转换为您看到的图库。

也就是说,如果你echo $post->post_content你会看到的是这样的:

[gallery ids="729,732,731,720"]

快速而肮脏的解决方案是在正则表达式介入之前处理该短代码。

$content = do_shortcodes($post->post_content);
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches);
$first_img = $matches [1] [0];

我无法帮助,但认为这是一个有点笨拙和低效的解决方案。 WordPress中的大多数图像都是&#34;附件&#34;到帖子,所以你可能最好直接查询附件,按照example from the Codex

function echo_first_image( $postID ) {
    $args = array(
        'numberposts' => 1,
        'order' => 'ASC',
        'post_mime_type' => 'image',
        'post_parent' => $postID,
        'post_status' => null,
        'post_type' => 'attachment',
    );

    $attachments = get_children( $args );

    if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
            $image_attributes = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' )  ? wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) : wp_get_attachment_image_src( $attachment->ID, 'full' );

            echo '<img src="' . wp_get_attachment_thumb_url( $attachment->ID ) . '" class="current">';
        }
    }
}

答案 1 :(得分:0)

获取Post的第一张图像在Function.php文件中输入此代码

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

}

在post循环中添加此代码