Я пытаюсь создать короткий код WordPress (часть WordPress этого не имеет значения), который будет искать в пределах определенного текста для ссылки и заменить его на тот, который я укажу. Например:
[scode]Click on <a href="www.X.com">this link</a>[scode]
[scode]Click on <a href="www.Y.com">this link</a>[scode]
... будет изменено на:
[scode]Click on <a href="www.Z.com">this link</a>[scode]
Я пытаюсь собрать функцию, которая будет искать ссылки и заменять их тем, что я указываю. Вот что я имею прямо сейчас:
// Adds [hide] shortcode for hiding content from non-registered users.
function hide_text( $atts,$content) {
if ( is_user_logged_in () ) {
return $content;
}
else {
$pattern = '(?<=href=("|\'))[^"\']+(?=("|\'))';
$newurl = "http://replacementurl.com";
$content = preg_replace($pattern,$newurl,$content);
echo $content;
}
}
add_shortcode( 'hide', 'hide_text' );
Однако это просто разрушает сайт. Я не эксперт по PHP (а тем более эксперт по регулярному выражению), но есть ли хотя бы какие-то явные нарушения в моем коде?
ОБНОВИТЬ:
Я запустил debug на сайте и узнал из журнала, что там был дополнительный }
. Теперь сайт не сбой, но содержимое, отображаемое эхом, пустое... Код обновлен выше
http://replcaement url.com
Довольно уверен, что это написано неправильно.
и нет ;
в конце строки.
Похоже, что вы правильно выполнили регулярное выражение, так как в большинстве случаев вам нужно избегать некоторых зарезервированных символов, которые смотрят на ответ @Akam.
Я предлагаю использовать preg цитаты.
(?<=href=("|'))[^"']+(?=("|'))
В вашем шаблоне есть синтаксическая ошибка, измените ее на:
$pattern = "(?<=href=(\"|'))[^\"']+(?=(\"|'))";
Ошибки:
$pattern = "(?<=href=("|'))[^"']+(?=("|'))";
^-- ^--not escaped