Извлечь изображение из содержимого - PullRequest
1 голос
/ 19 февраля 2010

Я хочу извлечь изображения из the_content () и хочу отобразить первые изображения из записи на index.php и хочу отобразить все изображения на single.php. Для этого я применяю фильтр к the_content ():

<?php
/*****************************************************************************
    Post Summary Filter - Grap Image Thumbnails, Strip Tags, etc
******************************************************************************/
add_filter('the_content', 'filterContentSummary', 0);

function filterContentSummary($content){
    global $post;

    if( is_home() || is_category() || is_tag() || is_author() || is_date() || is_search() || is_single ){
        //if NOT single page or "page" page
            $img='';        //default img code
            $final_width = 300;

            $content = $post->post_content;

            //search for first image in article
            preg_match('/<img[^>]*>/i',$content,$matches);

            //image found, process it
            if($matches){
                preg_match('/src="[^"]*"/i',$matches[0],$src);
                preg_match('/width="(\d*)[^"]*"/i',$matches[0],$width);

                if($width[1] < $final_width){
                    $final_width = $width[1];
                }


            }

            //prepare text
            if(!empty($post->post_excerpt)){
                $content = $post->post_excerpt;
            }else{
                //strip shortcodes, tags
                $content = preg_replace('/\[\/*[^\]]*\]/i', '', $content);  //cont is ready
                $content = preg_replace('/<[^>]*>/i', '', $content);    //cont is ready
                $content = substr($content,0,500);
                $content = explode(". ", $content);

                array_pop($content);
                $content = implode(". ", $content) . "";
            }

            if($content=="."){
                $content = $post->post_content;
            }
            //prepare final content
            $content =  "<p>". $content ."</p>";

            //Adding Read more link
            $content .= "<p align='right' class='seemore'><a href=".  get_permalink() . "></a></p>";
    }
    // Make sure to return the content
    return $content;
}
?>

В index.php с помощью регулярных выражений я нахожу первое изображение из поста и отображаю его:

<?php while (have_posts()) : the_post();
                            $content = $post->post_content;
                            preg_match_all('/(<img.*src="(.*)"[^>]*>)/iU',$content,$matches);
                        ?>

Теперь $matches имеют все изображения:

<div class="content-img"><img src="<?php echo $matches[2][0];?>"/></div>

... используется для отображения первого изображения в сообщении.

Но как я могу отобразить все изображения на single.php?

1 Ответ

3 голосов
/ 21 февраля 2010

после global $post просто добавьте if(is_single()) return $content; таким образом, если это единственный шаблон, который вы отфильтруете, вы вернете исходное содержимое со всеми изображениями ... затем отобразите его нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...