У нас есть содержимое страницы с несколькими экземплярами get_template_part
. Мы хотим получить их в массиве, сделав на них eval
, чтобы мы могли включить и эти части шаблона.
Проблема в том, что мы знаем начало "get_template_part"
и окончание "');"
, но окончание то же самое для многих подобных случаев, которые мы не хотим захватывать.
Как получить только окончание get_template_part
и исключить все остальные
Пример строки, которую мы хотим включить: <?php get_template_part( 'template-parts/breadcrumbs' ); ?>
Я попробовал следующую функцию который принимает стог сена и 2 иголки и возвращает соответствующую строку, но опять же вторая игла никоим образом не является исключительной для первой иглы
function get_substring_part($haystack, $needle, $needle2, $find) {
$lastPos_one = 0;
$lastPos_two = 0;
$positions_one = array();
$positions_two = array();
while (($lastPos_one = strpos($haystack, $needle, $lastPos_one))!== false) {
$positions_one[] = $lastPos_one;
$lastPos_one = $lastPos_one + strlen($needle);
}
foreach ($positions_one as $value_start) {
$return[]['start'] = $value_start;
}
while (($lastPos_two = strpos($haystack, $needle2, $lastPos_two))!== false) {
$positions_two[] = $lastPos_two;
$lastPos_two = $lastPos_two + strlen($needle2);
}
foreach ($positions_two as $value_end) {
$return[]['end'] = $value_end;
}
$counter = 0;
foreach ($return as $positions) {
$string['start'] = $positions['start'];
$string['end'] = $positions['end'];
$var = substr($haystack, $positions['start'], $positions['end']);
if (strpos($var, $find) !== false) {
$string['string'] = substr($haystack, $positions['start'], $positions['end']);
}
$counter++;
}
return $string;
}
Я использую эту функцию со следующими атрибутами:
get_substring_part($content, 'get_template_part', ');', 'get_template_part')