我帮了一个朋友的忙,他希望有一个页面,所有帖子都只显示标题和帖子中的第一个嵌入图像。不是特色图片(或帖子缩略图),而是帖子内容的一部分。
由于这是一个好处,我没有请求 FTP 访问,只是使用“显示帖子”插件,它使用 get_the_content 来显示帖子。
有没有办法(正则表达式?)提取图像?我显然可以从其他方法中获取标题,但是如果嵌入了图像怎么办?它是否仍然附加并可以从 get_post_thumbnail 等中使用?
谢谢你的帮助!
干得好:
<?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. ?>
我以@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/
我已经多次使用以下函数来获取内容中的第一张图像并且效果很好:
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() ?>
您不能使用 提取标题get_the_content
。您可以做的是(如您所说)使用正则表达式来获取内容的第一个图像元素(已通过 WP 帖子编辑器插入)。也可以从内容的开头获得简短的摘录。
如果您需要获取帖子标题,则需要为其使用函数(例如get_the_title
)或获取帖子对象并使用其post_title
值。
get_post_thumbnail
获取设置为帖子特色图像的图像附件。必须使用查询或正则表达式提取位于内容区域中的所有图像。对于查询,您将使用两个额外的变量:post_parent
获取某个帖子的子“帖子”并post_type
仅查询附件帖子(图像等)。
如果您被限制使用插件(和get_the_content
),您可能需要使用一些技巧来获取标题。如果需要,您当然可以使用正则表达式来提取第一个可用img
元素。
编辑:我可能误解了一点,你确实可以使用get_the_title
是的,那么那部分不用担心。
您好,通过此代码,您可以非常轻松地从您的代码中创建图库。请享用!
<?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();
?>