将‘Medium’大小与Catch_That_Image()函数一起使用

时间:2013-04-29 作者:Telmo Gonçalves

我有一个函数,我相信你们很多人都知道:

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];

  return $first_img;
}
我想在帖子循环中使用拇指、中号等尺寸。

你们知道我该怎么做吗?

干杯

3 个回复
最合适的回答,由SO网友:Jesse 整理而成

When the first image is a Wordpress image attachment.

在3.6中,有一种更简单的方法。

function get_first_image_medium_size_url($post_id) {

 if(!$images = get_attached_images($post_id))
    return false;

 $first_image = current($images);

 if(!$src = wp_get_attachment_image_src($first_image->ID,\'medium\'))
    return false;

 $medium_url = current($src);

 return $medium_url;
}
get_attached_images 在3.6中提供。

wp_get_attachment_image_src 从2.5.0开始提供,它将自动获取图像附件或将其缩放到指定大小。

由于3.6尚未发布,您可能需要创建自己的get_attached_images 作用

function my_get_attached_images( $post_id = 0 ) {
    $post = empty( $post_id ) ? get_post() : get_post( $post_id );
    if ( empty( $post ) )
        return;

    $args = array(
        \'post_parent\' => $post->ID,
        \'post_type\' => \'attachment\',
        \'post_mime_type\' => \'image\',
        \'posts_per_page\' => -1,
        \'orderby\' => \'menu_order\',
        \'order\' => \'ASC\',
    );


    $children = get_children( $args );

    return (array)$children;
}
<小时>What if the image isn\'t a Wordpress attachment type?

例如,您正在链接到flickr图像。

这是我的catch\\u first\\u图像版本

function get_first_image($content){
    if(!$content)
        return false;
    preg_match("@<img.+?src=[\\"\'](.+?)[\\"\'].+?>@",$content,$m);

    if($m[1])
        if(filter_var($m[1], FILTER_VALIDATE_URL))
            return $m[1];
    return false;
}
我认为它比你的好。通常,当我看到ob\\u*函数时,我的心跳会加快。呵呵

How to resize the image?

我想使用Wordpress Photon 做这件事。

function photon_image_url($orgin_url){
        $orgin_url = str_replace(array(\'http://\',\'https://\'),\'\',$origin_url);
        return \'http://i0.wp.com/\'.$origin_url.\'?w=50%\';
}
注意:此函数只是让您大致了解如何使用光子。

当然,两种情况下都可以使用光子。你知道,这是一种CDN服务。

SO网友:s_ha_dum

您需要抓取图像,获取其ID,然后使用wp_get_attachment_image 拾取大小适当的图像。

function first_image_medium_wpse_97658($content) {
  global $wpdb;
  $pattern = \'|<img.*?src="([^"]+)".*?/>|\';
  preg_match($pattern,$content,$matches);
  if (!empty($matches[1])) {
    $path = pathinfo($matches[1]);
    if (!empty($path[\'filename\'])) {
      $id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_name = %s",$path[\'filename\']));
      if (!empty($id)) {
        $content = wp_get_attachment_image($id,\'medium\'); 
      }
    }
  }
  return $content;
}
add_filter(\'the_content\',\'first_image_medium_wpse_97658\');
和另一个版本,默认情况下使用图像上设置的类。此查询没有额外的数据库查询,但如果未设置这些类,则会失败。

function first_image_medium_wpse_97658_v2($content) {
  $pattern = \'|<img.*?class="([^"]+)".*?/>|\';
  preg_match($pattern,$content,$matches);
  if (!empty($matches[1])) {
    $classes = explode(\' \',$matches[1]);
    $id = preg_grep(\'|^wp-image-.*|\',$classes);
    if (!empty($id)) {
      $id = str_replace(\'wp-image-\',\'\',$id);
      if (!empty($id)) {
        $id = reset($id);
        $content = wp_get_attachment_image($id,\'medium\');  
      }
    }
  }
  return $content;
}
add_filter(\'the_content\',\'first_image_medium_wpse_97658_v2\');
也可以直接调用该函数,而无需用作过滤器回调。

echo first_image_medium_wpse_97658_v2($post->post_content);
要用内容中的第一个图像替换摘录,需要进行细微的更改。这个the_excerpt 筛选器传递的内容与the_content 筛选,但不能保证\\u post\\u content\\uimage会在其中。

function first_image_medium_wpse_97658_v3($excerpt) {
  global $post;
  $content = $post->post_content;
  $pattern = \'|<img.*?class="([^"]+)".*?/>|\';
  preg_match($pattern,$content,$matches);
  if (!empty($matches[1])) {
    $classes = explode(\' \',$matches[1]);
    $id = preg_grep(\'|^wp-image-.*|\',$classes);
    if (!empty($id)) {
      $id = str_replace(\'wp-image-\',\'\',$id);
      if (!empty($id)) {
        $id = reset($id);
        $excerpt = wp_get_attachment_image($id,\'medium\');  
      }
    }
  }
  return $excerpt;
}
add_filter(\'the_excerpt\',\'first_image_medium_wpse_97658_v3\',100);
我还为回调添加了一个优先级,以便过滤器运行得很晚,希望在其他过滤器之后运行,以便the_excerpt 被滤波器输出完全替代。

SO网友:Downloadtaky

有时我会使用与您类似的方法,因此这里有一个简单的函数可以复制/粘贴到您的functions.php

正如您所看到的,它将图像宽度设置为100px,图像高度设置为80px,我知道这不是最好的解决方案,因为图像没有裁剪或调整大小,它也可以是“重”图像,但如果您唯一需要的是一个捕捉第一幅图像的快速函数。。。给你。

Get的第一个图像宽度=100px高度=80px

<?php
function getImage10080($num) {
global $more;
$more = 1;
$link = get_permalink();
$content = get_the_content();
$count = substr_count($content, \'<img\');
$start = 0;
for($i=1;$i<=$count;$i++) {
$imgBeg = strpos($content, \'<img\', $start);
$post = substr($content, $imgBeg);
$imgEnd = strpos($post, \'>\');
$postOutput = substr($post, 0, $imgEnd+1);
$postOutput = preg_replace(\'/width="([0-9]*)" height="([0-9]*)"/\', \'/width="100px" height="80px"/\',$postOutput);
$image[$i] = $postOutput;
$start=$imgEnd+1;
}
if(stristr($image[$num],\'<img\')) { echo \'\'.$image[$num].""; }
$more = 0;
};
?>
将此代码放入函数后。php(无)您只需编写以下内容:

<?php getImage10080(\'1\');?>
您希望您的“捕获”图像显示在哪里。

结束

相关推荐

Hover images and Videos

我用这个代码在我的博客上显示视频循环。它工作得很好。作用phpfunction catch_video() { global $post, $posts; $first_vid = \'\'; ob_start(); ob_end_clean(); $output = preg_match_all(\'/<iframe.+src=[\\\'\"]([^\\\'\"]+)[\\\'\"].*>/i\', $post->post_c