Поэтому я пытаюсь взломать несколько символов в конце URL-адреса, который я получаю от функции preg_replace. Однако, похоже, он не работает. Я не знаком с использованием этих переменных в preg_replace (это было просто то, что я нашел, что «в основном» работал).
Вот моя попытка:
function addlink_replace($string) { $pattern = '/<ul(.*?)class="slides"(.*?)<img(.*?)src="(.*?)"(.*?)>(.*?)<\/ul>/is'; $URL = substr($4, 0, -8);; $replacement = '<ul$1class="slides"$2<a rel=\'shadowbox\' href="'.$URL.'"><img$3src="$4"$5></a>$6</ul>'; return preg_replace($pattern, $replacement, $string); } add_filter('the_content', 'addlink_replace', 9999);
В основном мне нужно удалить последний бит моего .jpg имени файла, поэтому я могу показать LARGE-изображение, а не THUMBNAIL, которое он генерирует, но «$ 4», похоже, не нуждается в манипулировании.
Этот ответ основан на том, что вы хотите выполнить в этом вопросе с HTML-структурой вашего другого вопроса . Регулярное выражение, размещенное в вашем вопросе, не будет соответствовать никому другому, кроме первого набора тегов <li>
и <img>
, и вы указали, что вам нужно сопоставить все теги <li>
и <img>
пределах <ul>
поэтому я написал большую функцию для этого.
Он будет обертывать теги <img>
которые находятся внутри <li>
пределах <ul>
с классом slides
с <a>
с источником, являющимся URL-адресом изображения с -110x110
строкой -110x110
, при сохранении источника эскизов в <img>
.
function addlink_replace($string) { $new_ul_block = ''; $ul_pattern = '/<ul(.*?)class="slides"(.*?)>(.*?)<\/ul>/is'; $img_pattern = '/<li(.*?)>(.*?)<img(.*?)src="(.*?)"(.*?)>(.*?)<\/li>/is'; preg_match($ul_pattern, $string, $ul_matches); if (!empty($ul_matches[3])) { preg_match_all($img_pattern, $ul_matches[3], $img_matches); if (!empty($img_matches[0])) { $new_ul_block .= "<ul{$ul_matches[1]}class=\"slides\"{$ul_matches[2]}>"; foreach ($img_matches[0] as $id => $img) { $new_img = str_replace('-110x110', '', $img_matches[4][$id]); $new_ul_block .= "<li{$img_matches[1][$id]}>{$img_matches[2][$id]}<a href=\"{$new_img}\">"; $new_ul_block .= "<img{$img_matches[3][$id]}src=\"{$img_matches[4][$id]}\"{$img_matches[5][$id]}></a>{$img_matches[6][$id]}</li>"; } $new_ul_block .= "</ul>"; } } if (!empty($new_ul_block)) { $replace_pattern = '/<ul.*?class="slides".*?>.*?<\/ul>/is'; return preg_replace($replace_pattern, $new_ul_block, $string); } else { return $string; } }
Изменение атрибута <a>
' href
от того, что изображение было сделано специально на линии
$new_img = str_replace('-110x110', '', $img_matches[2][$id]);
если вы хотите изменить его. Если вам нужно удалить из URL-адреса ничего, кроме -110x110
вам может потребоваться изменить его с str_replace
на preg_replace
или если вы хотите удалить определенное количество символов с конца URL-адреса, вы можете использовать substr
:
$new_img = substr($img_matches[2][$id], 0, -12);
Где -12
– количество символов, которые вы хотите удалить из конца строки (это отрицательно, потому что оно начинается в конце).
Здесь я опубликовал рабочий пример этой функции.
Возможно, вам захочется рассмотреть возможность изменения источника того, что генерирует этот блок кода, вместо использования этого регулярного выражения, поскольку это регулярное выражение может быть трудно поддерживать в будущем, если структура HTML изменяется.