2010-10-19 3 views
1

Я пытаюсь получить все изображений из сообщения WP, чтобы создать слайд-шоу из них. Googled вокруг и нашел этот кусок кода для извлечения и отображения изображений с поста:Как отображать все изображения из сообщения WordPress?

function getImage($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]*)"/', '',$postOutput);; 
     $image[$i] = $postOutput; 
     $start=$imgEnd+1; 
    } 
    if(stristr($image[$num],'<img')) { echo '<a href="'.$link.'">'.$image[$num]."</a>"; } 
    $more = 0; 
} 

Как вы можете себе представить, вы затем использовать GetImage («1») и т.д., чтобы получить 1-го, 2-го изображения от должности и т.д. Это не идеально для создания слайд-шоу, потому что я не знаю, сколько будет изображений.

Есть ли способ изменить приведенный выше код, чтобы получить массив изображений для создания цикла foreach, например? Извините, если моя логика немного испорчена, я не эксперт по PHP, как вы могли догадаться.

Заранее благодарим за любую помощь.

ответ

2

Этот код уже находят все изображения, но только распечатку 1.

Попробуйте этот вариант, который должен повторить все изображения вместо просто 1. Я не проверял это, но если вы исходный код работал, это должно.

function getImage() { 
    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]*)"/', '',$postOutput);; 
     if(stristr($postOutput,'<img')) { echo '<a href="'.$link.'">'.$postOutput."</a>"; } 
     $start=$imgEnd+1; 
    } 
    $more = 0; 
} 

Существует намного больше очистки, что можно было бы сделать на этот код, а также, но я только изменил то, что у вас было.

+0

Это сделал трюк, спасибо. Как я уже сказал, я схватил этот фрагмент из какого-то блога. Если есть что-то, что можно было бы очистить, я всегда хочу узнать, можете ли вы объяснить :) – Justine

+0

Один вопрос: что возвращает эта функция? Это массив или просто куча кода? Я хотел создать инструкцию foreach, используя эти изображения, но не похоже, что я могу. – Justine

+0

Этот код просто выделяет все ваши изображения, он не возвращает их. Цикл for внутри этого кода уже перебирает все изображения. Если вы закомментируете строку 'if', вы можете отключить эхо-сигнал и поместить свой собственный код в цикл. Или вы можете изменить его, чтобы поместить каждый '$ postOutput' в массив и вернуть этот массив, который вы затем можете перебрать. –

1

Небольшое изменение в коде на концах $ imgBeg вместо $ imgEnd, то это отлично работает

function getImage() { 
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]*)"/', '',$postOutput);; 
    if(stristr($postOutput,'<img')) { echo '<a href="'.$link.'">'.$postOutput."</a>"; } 
    $start=$imgBeg+1; 
} 
$more = 0; 

}

Смежные вопросы