我从这个代码发布第一张图片:
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为什么它不起作用以及如何解决这个问题?
答案 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循环中添加此代码