2012-04-03 4 views
1

Wordpress 블로그에서 다음 함수를 사용하여 페이지 (단일 포스트 뷰)를 긁어 내고 첫 번째 이미지를 찾고 기본 이미지를 찾지 못하면 기본 이미지를 사용합니다.첫 번째 이미지를 긁어내는 PHP 함수

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 = "http://custome_url_for_default_image.png"; 
    } 
    return $first_img; 
} 

나는 Tumblr 테마와 같이 붙여 넣으려고했으나 PHP 기능으로로드되지 않는 몇 가지 문제가 발생했습니다. 확실하게 나는 뭔가를 놓치고있다. 누구든지이 문제를 해결하기위한 아이디어가 있다면 시도해 보니 기쁩니다.

감사합니다,

P.

+0

는 "긁어"의미합니까? – mmcglynn

+0

예 죄송합니다 : 웹 스크래핑, 페칭, 수확 ... PHP 스크립트의 시작 및 종료 태그가 필요하다는 것을 알았지 만 함수를 추가하지는 않았습니다. – Parneix

답변

5

이 작업을 수행하는 가장 좋은 방법은 avoid using regexes to parse HTML하는 것입니다.

있는 DOMDocument를 사용해보십시오 :

function catch_that_image() { 
    global $post; 
    $dom = new DOMDocument(); 
    $dom->loadHtml($post->post_content); 
    $imgTags = $dom->getElementsByTagName('img'); 
    if ($imgTags->length > 0) { 
     $imgElement = $imgTags->item(0); 
     return $imgElement->getAttribute('src'); 
    } else { 
     return 'http://custome_url_for_default_image.png'; 
    } 
} 
+0

이것은이 문제를 해결하는 데 사용하는 정확한 전략입니다. DOMDocument를 사용하면이 문제를 매우 우아하게 해결할 수 있습니다. 브라보. –

+0

확실히 깨끗한 것으로 보이며 그러한 기능을 코딩하는 "정통"또는 올바른 방법을 배우게되어 기쁩니다. 아직 코드가 PHP 코드로 작동하지 않기 때문에 나는 여전히 뭔가 잘못하고있다 : PHP 코드를 열고 닫는 기능을 사용했지만, PHP 코드에 함수를 포함 시키더라도 실제로는 내 웹 사이트에 표시된다. ''. 나는 더 많은 테스트를하고 그것을 알아 내려고 노력할 것입니다. 귀하의 제안에 감사드립니다. – Parneix

+0

[업데이트] 분명히 (내가 틀리지 않는다면) Tumblr의 테마는 PHP 코드를 지원하지 않습니다 ...이 점에 대해 나쁘다. PHP 스크립트를 자체 호스팅 서버에 호스팅하고 테마 내에서 호출하는 방법도 있습니다. 그러나 그것은 모두 새로운 볼 게임입니다. 도와 주셔서 감사합니다! – Parneix

관련 문제