Я использую этот код, чтобы заменить шорткоды в CMS с ссылкой, включая изображение, но он заменяет только первый SHORTCODEнайти и заменить все вхождения строки [PHP] Шорткоды
$string = $row['Content'];
if(stristr($string,'[gal=')){
$startTag = "[gal=";
$endTag = "]";
$pos1 = strpos($string, $startTag) + strlen($startTag);
$pos2 = strpos($string, $endTag);
$gal = substr($string, $pos1, $pos2-$pos1);
$q=$db->prepare("select * from images where Gal_ID = :gal");
$q->execute(["gal"=>$gal]);
$imgs='';
while($r=$q->fetch(PDO::FETCH_ASSOC)){
$images[] = $r['Image'];
}
foreach($images as $val){
$imgs .= "<a href='gallery/large/$val' class='fancybox-thumbs' rel='gallery'><img src='gallery/thumb/$val'></a>";
}
$result = substr_replace($string, $imgs, $pos1, $pos2-$pos1);
$result = str_replace($startTag,'',$result);
$result = str_replace($endTag,'',$result);
echo $result;
}
else{
echo $string;
}
строка содержит несколько абзацев и 2 шорткоды
[gal=36] and [gal=37]
результат замены только первый шорткод со ссылками и изображениями, но второй шорткод отображается следующим образом: «37» только номер. Итак, как проложить все короткие коды, чтобы заменить их ссылками не только первым коротким кодом
Это должно быть сделано с заменой регулярного выражения так, чтобы оно заменяло все экземпляры, а не только первые. Я вернусь немного позже и попытаюсь написать это для вас, если никто не поможет. –
Я бы предложил использовать регулярное выражение для соответствия коротким кодам. Лично я бы preg_match все существующие коды, объединить их в один запрос, запустить и форматировать его в массив. Затем preg_replace_callback, чтобы заменить короткие коды на поиск массива результатов. Вы получаете два вызова шаблонов регулярных выражений, но только один запрос, который будет самой медленной частью. –
'$ q = $ db-> prepare (" select * from images where Gal_ID = '$ gal' ");' warning: injection immanent. Дело не в том, что вы используете 'PDO :: prepare', вы можете как-то безопасно вставлять значения в запрос. Вы должны использовать 'SELECT * FROM images WHERE Gal_ID =: id' и' $ q-> execute ([': id' => $ gal]); ' –