0

我帮了一个朋友的忙,他希望有一个页面,所有帖子都只显示标题和帖子中的第一个嵌入图像。不是特色图片(或帖子缩略图),而是帖子内容的一部分。

由于这是一个好处,我没有请求 FTP 访问,只是使用“显示帖子”插件,它使用 get_the_content 来显示帖子。

有没有办法(正则表达式?)提取图像?我显然可以从其他方法中获取标题,但是如果嵌入了图像怎么办?它是否仍然附加并可以从 get_post_thumbnail 等中使用?

谢谢你的帮助!

4

5 回答 5

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. ?>
于 2013-07-30T05:11:14.443 回答
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/

于 2015-01-20T01:36:13.910 回答
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() ?>
于 2013-07-30T08:07:33.033 回答
0

您不能使用 提取标题get_the_content。您可以做的是(如您所说)使用正则表达式来获取内容的第一个图像元素(已通过 WP 帖子编辑器插入)。也可以从内容的开头获得简短的摘录。

如果您需要获取帖子标题,则需要为其使用函数(例如get_the_title)或获取帖子对象并使用其post_title值。

get_post_thumbnail获取设置为帖子特色图像的图像附件。必须使用查询或正则表达式提取位于内容区域中的所有图像。对于查询,您将使用两个额外的变量:post_parent获取某个帖子的子“帖子”并post_type仅查询附件帖子(图像等)。

如果您被限制使用插件(和get_the_content),您可能需要使用一些技巧来获取标题。如果需要,您当然可以使用正则表达式来提取第一个可用img元素。

编辑:我可能误解了一点,你确实可以使用get_the_title是的,那么那部分不用担心。

于 2013-07-30T05:13:23.213 回答
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();
?>
于 2017-01-01T20:33:56.287 回答