WordPress: получить все шорткоды из поля содержимого - PullRequest
1 голос
/ 17 июня 2019

Я использую собственный шорткод для отображения модальности Bootstrap внутри моего контента. Проблема в том, что <div> нарушает содержание. Смотрите здесь: Вывод содержимого шорткода WordPress в тексте и нижнем колонтитуле

No2 Я хочу изменить шорткод и отображать только ссылку на модал и отображать модал- <div> после содержимого.

Для этого я проверяю, есть ли у поля контента шорткоды, и если это так, я отображаю все модалы после контента.

Вот код для этого: (Часть отсюда: https://stackoverflow.com/a/18196564/1788961)

$content = get_sub_field("textfield");
//write the begining of the shortcode
$shortcode = 'term';

$check = strpos($content,$shortcode);
if($check=== false) {
    //echo '<h1>NO Shortcode</h1>';
} else {
    //echo '<h1>HAS Shortcode</h1>';


    $str = '[term value="Term Name" id="600"][term value="Another Term" id="609"]';

    preg_match_all('~\[term value="(.+?)" id="(.+?)"]~', $str, $matches);

    var_dump($matches[2]);

    foreach($matches[2] as $match){
        echo 
            '<div class="modal fade" id="termModal_'.$match.'" tabindex="-1" role="dialog" aria-labelledby="termModal_'.$match.'_Title" aria-hidden="true">
                (rest of modal)
            </div>
        ';


    }


}

Пока все отлично работает. Но теперь мне нужны шорткоды из поля содержимого.

Я не знаю, как их получить. Вот мой шорткод:

[term value="Custom Link Title" id="123"]

Мне нужен идентификатор из каждого шорткода внутри содержимого и я храню их в переменной `$ str '.

1 Ответ

1 голос
/ 18 июня 2019

Этот метод, использующий функцию preg_match(), должен работать:

$id = 0;
$matches = array();
preg_match('#\[term(.*) id="([0-9]{1,})"(.*)\]#', $content, $matches);
if (count($matches) > 2) {
    $id = $matches[2];
}

Это будет работать независимо от порядка, в котором указаны атрибуты шорткода, но предполагает наличие двойных кавычек вокруг значения атрибута idи что значение состоит только из цифр.

...