Как изменить разметку ?

Я хотел бы изменить разметку, созданную [галереей] из того, что является стандартным (dl), в неупорядоченный список с разницей. Ниже представлена ​​желаемая разметка:

<ul> <li><a href="/path/to/image.jpg"><img src="/path/to/image.jpg" /></a></li> <li><a href="/path/to/image2.jpg"><img src="/path/to/image2.jpg" /></a></li> <!-- And so on, all in one ul --> </ul> 

Мне нужен основной источник изображения для link & img, так как я хочу запустить img src через скрипт php cropper.

Это возможно? Я уверен, что мы можем взломать его!

Спасибо за ваши ответы, Ян и Раст. Они указали мне в правильном направлении. Вот что я закончил.

Это отключает короткие коды в контенте. Идеально подходит для этого сайта, и функция получает прикрепленные изображения и выплевывает их как список. (Я нашел функцию где-то и немного уменьшил ее)

 // Removed shortcodes from the content add_filter('the_content', 'strip_shortcodes'); // Get attached images & spits out a list of them. function nerdy_get_images($size = 'thumbnail', $limit = '0', $offset = '0') { global $post; $images = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') ); if ($images) { $num_of_images = count($images); if ($offset > 0) : $start = $offset--; else : $start = 0; endif; if ($limit > 0) : $stop = $limit+$start; else : $stop = $num_of_images; endif; $i = 0; foreach ($images as $image) { if ($start <= $i and $i < $stop) { $img_title = $image->post_title; // title. $img_description = $image->post_content; // description. $img_caption = $image->post_excerpt; // caption. $img_url = wp_get_attachment_url($image->ID); // url of the full size image. $preview_array = image_downsize( $image->ID, $size ); $img_preview = $preview_array[0]; // thumbnail or medium image to use for preview. ?> <li> <a href="<?php echo $img_url; ?>"><img src="<?php echo $img_preview; ?>" alt="<?php echo $img_caption; ?>" title="<?php echo $img_title; ?>"></a> </li> <? } $i++; } } } 

Это вызов в single.php

 <ul> <?php nerdy_get_images('medium','0','0'); ?> </ul> 

Это выплескивает список именно так, как я этого хотел.

Еще раз спасибо, ребята!

Вывод элементов в функции gallery_shortcode() не фильтруется, поэтому нет возможности изменить его там. Пометка может быть заменена только полностью, используя фильтр post_gallery который запускается при запуске. Это немного нетрадиционно по сравнению с обычным конечным результатом фильтрации и, вероятно, по соображениям производительности (генерация галереи может быть значительно сложной в вычислительной области).

Но он использует wp_get_attachment_link() для генерации ссылок и его выход фильтруется через wp_get_attachment_link hook с большим количеством деталей:

 apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text ); 

Нужно ли выполнять какой-либо действительно сложный add_image_size() отдельный скрипт? Почему бы не позволить WP обрабатывать его с помощью add_image_size() ?

Если вы хотите изменить списки dl списки ul на всех галереях, а не только на тех, кто запрашивает это через дополнительные атрибуты, вы можете подключиться к фильтру post_gallery который запускается в начале функции gallery_shortcode . Там вы можете переопределить и установить значения по умолчанию для атрибутов.

Конечный результат не фильтруется, но я думаю, что должно быть возможно удалить обработчик gallery_shortcode() по умолчанию для gallery и добавить свою собственную функцию, которая обертывает gallery_shortcode() но добавляет окончательную обработку в конце. Или попробуйте подключиться к wp_get_attachment_link , как предлагает Rarst .

Я так делаю это сейчас. У меня есть 2 кода, один для отображения короткого кода галереи и еще один для отображения остальной части контента:

Первый код:

 $ gallery = '';
 $ match = '/(\[)(gallery).*?(ids).*?(\])/';
 $ matches = '';
 preg_match ($ match, get_the_content (), $ matches, PREG_OFFSET_CAPTURE);
 if ($ matches):
     $ matches = $ matches [0];
     $ gallery = $ matches [0];
     echo '';
     do_shortcode ($ галерея);
     echo '';
 ENDIF;

И второе:

 $ match = '/(\[)(gallery).*?(ids).*?(\])/';
 $ content = preg_replace ($ match, '', get_the_content ());
 if (! empty ($ content)):
     $ content = ''.  $ content.  wp_link_pages (массив ('before' => ''. __ ('Страницы:', 'veento'), 'after' => '')).  '';
     print $ content;
 ENDIF;