我正在帮朋友寻找一个页面,其中显示的所有帖子只显示标题和帖子中的第一个嵌入图片。不是特色图片(或缩略图后),而是作为帖子内容的一部分。
因为它有利于我没有请求FTP访问,我只是使用“显示帖子”插件,它使用get_the_content来显示帖子。
有没有办法(正则表达式?)来提取图像?我可以明显地从其他方法中获得标题,但是如果图像是嵌入式的呢?它是否仍然附加并可从get_post_thumbnail等使用?
感谢您的帮助!
答案 0 :(得分:1)
你走了:
<?php while ( have_posts() ) : the_post(); ?>
<?php preg_match("#<img(.+?)src=(.+?)\/>#", $post->post_content, $matches);
/** $matches is an array, $matches[0] holds the img code */
echo $matches[0]; ?>
<?php the_content();?>
<?php endwhile; // end of the loop. ?>
答案 1 :(得分:0)
您无法使用get_the_content
提取标题。你可以做的是(如你所说)使用正则表达式来获取内容的第一个图像元素(已经通过WP post编辑器插入)。也可以从内容的开头获得一个简短的摘录。
如果您需要获取帖子标题,则需要为其使用函数(例如get_the_title
)或获取帖子对象并使用其post_title
值。
get_post_thumbnail
获取设置为帖子精选图片的图片附件。驻留在内容区域中的所有图像必须通过查询或正则表达式提取。使用该查询,您将使用两个额外的变量:post_parent
来获取某个帖子的子项“帖子”,post_type
仅查询附件帖子(图片等)。
如果您只能使用插件(和get_the_content
),则可能需要使用一些技巧来获取标题。如果需要,您当然可以使用正则表达式提取第一个可用的img
元素。
编辑:我可能误解了一下,你确实可以访问get_the_title
是的,不用担心那部分。
答案 2 :(得分:0)
我已经使用了以下功能很多次来获取内容中的第一张图片并且效果非常好:
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;
}
那么你只需要像这样回应它:
<?php echo catch_that_image() ?>
答案 3 :(得分:0)
我使用@ wonderdojo的答案作为起点,但是在下面的文章中,我终于找到了一个保留所有图像属性的解决方案,例如类和标题。
<?php
$beforeEachImage = "<div>";
$afterEachImage = "</div>";
preg_match_all("/(<img [^>]*>)/",get_the_content(),$matches,PREG_PATTERN_ORDER);
for( $i=0; isset($matches[1]) && $i < count($matches[1]); $i++ ) {
echo $beforeEachImage . $matches[1][$i] . $afterEachImage;
}
?
http://chrisschuld.com/2009/11/removing-everything-but-images-in-a-wordpress-post/
答案 4 :(得分:0)
您可以通过此代码轻松地从代码中创建图库。享受!
<?php $the_query = new WP_Query( 'posts_per_page=5' ); ?>// five is number of post // you want by this you can make gallery
<?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>
<?php preg_match("#<img(.+?)src=(.+?)\/>#", $post->post_content, $images);
echo $images[0]; ?>
<?php the_content();?>
<?php endwhile; ?>
<?php
endwhile;
wp_reset_postdata();
?>