2017-01-21 9 views
0

Я пытаюсь добавить строку в конец какой-либо ссылки в содержании, мой пытается этот код:PHP: Изменить ссылку в содержание

add_filter('the_content', 'crawl_content'); 
function crawl_content($text) { 
    $search = '/href="(.*?)"/s'; 
    preg_match_all($search, $text, $matches); 
    for ($a = 0; $a < count($matches[0]); $a++) { 
     $new = "href=\"" . $matches[1][$a] . "/?=dddd\" class=\"newsLink\""; 
     $text = preg_replace('%' . $matches[0][$a] . '%', $new, $text); 
    } 
    return $text; 
} 

Проблема заключается в том:

Warning: preg_replace(): Unknown modifier 'd' in functions.php on line 112 
+2

Добро пожаловать на ТАК! Если вам нужна помощь, вам нужно быть немного понятнее. Какой текст передается вашему фильтру? Какой текст возвращается? Как вы хотите, чтобы текст возвращался, чтобы быть другим (или, что бы это было, если бы оно было «Правильно»? ** Будьте конкретными **. Подробности имеют значение! –

+0

@cale_b i edit my post –

+0

Что такое содержимое ' $ text'? Какая строка '112'? – Toto

ответ

1

Я предполагаю, что у вас есть символ, используемый в качестве разделителя (т.е. %), присутствующие в строке.

Вы могли бы избежать его preg_quote:

// all domains to exclude, separated by | 
$domains_to_exclude = 'kam.com|kam2.com'; 

for ($a = 0; $a < count($matches[0]); $a++) { 
    if (preg_match('~'.$domains_to_exclude.'~i', $matches[1][$a])) continue; 

    $new = "href=\"" . $matches[1][$a] . "/?=dddd\" class=\"newsLink\""; 
    $text = preg_replace('%' . preg_quote($matches[0][$a], '%') . '%', $new, $text); 
} 
+0

Это мое предположение. Поскольку совпадения могут содержать любое количество символов, включая« специальные »символы регулярных выражений. о preg_quote, отличное решение! –

+0

Как можно исключить из него какой-то домен? –

+0

@wpPicture: Самый простой способ - проверить массив '$ matches [0] [$ a]' в начале t он петлю. – Toto

0

В PHP , регулярное выражение должно быть заключено в паре delimiters. Разделителем может быть любой небуквенный символ, не обратный слэш, не-пробельный символ; /, #, ~ являются наиболее часто используемыми.

function crawl_content($text) 
{ 
    $search = '/href="(.*?)"/s'; 
    preg_match_all($search, $text, $matches); 
    for ($a = 0; $a < count($matches[0]); $a++) { 
     $new = sprintf('href="%s/?=dddd" class="newsLink"',$matches[1][$a]); 
     $text = preg_replace('~' . $matches[0][$a] . '~', $new, $text); 
    } 
    return $text; 
} 
+0

OP использует' % 'в качестве разделителя, ваше предложение не отвечает на вопрос. – Toto

+0

, пожалуйста, проверьте URL-адрес text на разделитель% – Scaffold