поэтому я пытаюсь сделать обычную замену каждого экземпляра имени компании в wordpress, и я столкнулся с проблемой, когда иногда (обычно в href ссылок) это разрыв ссылок.
код, который я использую (включает фильтр для пользовательских полей ACF)
//Replace the word lunch with a span function replace_text_wps($text){ $replace = array( // 'WORD TO REPLACE' => 'REPLACE WORD WITH THIS' 'lunch!' => '<span class="lunch">lunch!</span>', 'Lunch!' => '<span class="lunch">lunch!</span>', 'LUNCH!' => '<span class="lunch">lunch!</span>' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'replace_text_wps'); add_filter('the_excerpt', 'replace_text_wps'); add_filter('the_title', 'replace_text_wps'); add_filter('acf_the_content', 'replace_text_wps');
Есть ли способ заменить его за пределами таких вещей, как теги href? я просмотрел такие вещи, как DOM, но я не уверен, есть ли более простой метод – он, похоже, не вызывает горе в каких-либо других случаях, поэтому я не уверен, что pre = обработка всего HMTL и поиск слово уместно. Я действительно задавался вопросом о поиске строки, содержащей пробел до и после нее, но я не был уверен, как включить в себя ведущие / конечные пробелы, и это было немного странно? Заранее спасибо! Пит
нормально, поэтому в этом случае, который является довольно конкретным, я нашел, что следующий код работает достаточно хорошо. добавлены конечные / ведущие пробелы в исходных параметрах совпадения, а также варианты, чтобы найти его непосредственно после тегов html, включая пробел. менее изящный, но достаточный для цели здесь.
function replace_text_wps($text){ $replace = array( // used mid-line ' lunch! ' => ' <span class="lunch">lunch!</span> ', ' Lunch! ' => ' <span class="lunch">lunch!</span> ', ' LUNCH! ' => ' <span class="lunch">lunch!</span> ', // used at end of lines ' lunch!' => ' <span class="lunch">lunch!</span>', ' Lunch!' => ' <span class="lunch">lunch!</span>', ' LUNCH!' => ' <span class="lunch">lunch!</span>', // used inside html tags like headers '>lunch!' => '><span class="lunch">lunch!</span>', '>Lunch!' => '><span class="lunch">lunch!</span>', '>LUNCH!' => '><span class="lunch">lunch!</span>', //used directly after html tags '> lunch!' => '> <span class="lunch">lunch!</span>', '> Lunch!' => '> <span class="lunch">lunch!</span>', '> LUNCH!' => '> <span class="lunch">lunch!</span>', //exclude alt tags on images, title attributes etc '"lunch!' => '"lunch!', 'lunch!"' => 'lunch!"', '"Lunch!' => '"lunch!', 'Lunch!"' => 'lunch!"' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'replace_text_wps'); add_filter('the_excerpt', 'replace_text_wps'); add_filter('the_title', 'replace_text_wps'); add_filter('acf_the_content', 'replace_text_wps');