2017-05-01 7 views
0

Wordpress 테마를 만들고 있는데 사용자 정의 단축 코드가 있습니다. 짧은 코드는 이미지가 포함 된 일부 콘텐츠로 둘러 쌉니다. 단축 코드는 DOMDocument를 사용하여 이미지의 src를 추출하고이 URL을 사용하여 새 DIV에 대한 배경 이미지로 만듭니다.PHP DOMDocument 작업은 로컬에서 실행될 때 예상 값을 반환하지만 서버에서 페이지가 실행될 때 비어 있습니다.

다음은 관련 코드입니다 :

//find image src 
$html = do_shortcode($content); 

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 
$xpath = new DOMXPath($doc); 
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg" 

echo '<script>console.log('.'"Source: '.$src.'");</script>'; 

$overlay_html = ''; 
foreach($xpath->evaluate("//*[contains(@class, 'sp-img-overlay')]") as $childNode) { 
    $overlay_html .= $doc->saveHtml($childNode); 
} 

//removes empty p tags from content 
$content = do_shortcode($content); 
$content = force_balance_tags($content); 
$content = preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content); 

//removes the actual images and captions 
$just_text = $content; 
$just_text = preg_replace('#(<figure.*?>).*?(</figure>)#', '', $just_text); 
$just_text = preg_replace("/<img[^>]+\>/i", "", $just_text); 


//build output 
//make src captured earlier the background image. 
$output = '<div class="section-pairing full-bleed-mobile">'; 
    $output .= '<div class="section-pairing-img full-bleed-mobile '.$img_side.' '.$values['mobile_img_size'] .'" style=" background-image:url('. $src .')">'; 
     $output .= $overlay_html; 
    $output .= '</div>'; 

    $output .= '<div class="section-pairing-text '.$text_side.'">'; 
     $output .= $just_text; 
    $output .= "</div>"; 
$output .= "</div>"; 


return $output; 

내가 내 로컬 dev에 환경이 실행, 그 콘솔 로그. . .

echo '<script>console.log('.'"Source: '.$src.'");</script>'; 

. . . 이미지의 올바른 경로를 반환하고 단축 코드가 의도 한대로 작동합니다. 그러나 서버로 마이그레이션 할 때 페이지의 다른 모든 항목은 올바르게 작동하지만이 단축 코드는 작동하지 않으며 콘솔 로그는 URL없이 "원본 :"을 반환하고 이미지가 없습니다.

저는 웹 개발에 익숙하지 않고 DOMDocument를 처음 사용하기 때문에이 작업을 수행하는 방법에 대한 제안 사항에 만족할 것입니다.

답변

0

안녕하세요. 모두 해결책을 찾았습니다. loadHTML 명령의 | "LIBXML_HTML_NODEFDTD LIBXML_HTML_NOIMPLIED"

//find image src 
$html = do_shortcode($content); 

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); 
$allImages = $doc->getElementsByTagName('img'); 
$imgL = $allImages->length; 
$bgimg = $allImages->item(0); 
$src = $bgimg->getAttribute('src'); 

는 키가 떨어지는 것 같았다. 나는 이전에 가지고 있던 문제를 해결하려고했지만, 지금은 문제가 없다.

나는 src 속성을 얻는 더 좋은 방법이라고 생각하는 것을 발견했다.