Intereting Posts
Массовое удаление пользователей по ролям? SQL? Декларативная настройка WordPress в XML или JSON или YAML цветной выбор радужки в событии виджета – не срабатывает, когда первоначально, когда виджет сначала создается Использование поля ACF на странице в цикле сообщений? Двадцать четырнадцать: неуловимый заголовок после создания заголовка больше Показать 6 последних сообщений на главной странице? функция запуска при входе в класс Как вы можете обрабатывать правила перезаписи для настраиваемых типов сообщений с возможностью фильтрации на пользовательских таксономических условиях? Пользовательский налоговый архив родителей? Загрузка страницы с задержкой Текст под заголовком сообщения на главной странице, но не хочу, чтобы он был полностью заполнен Вставка переменной в короткий код внутри php REST API, получить роль пользователя? Какое место лучше всего нанять внештатного (контрактного) разработчика WordPress? Получать индексированный указатель столбца в разбивке по страницам

Копирование коротких кодов в другом коротком коде

Я хотел бы обернуть существующие короткие коды в почтовом контенте внутри нового короткого кода, который я добавляю в свой плагин. Существующий контент выглядит следующим образом:

Some text - could be <span>HTML</span> or other shortcodes .... [component id=12] [component id=13] [component id=14] .... Some text - could be <span>HTML</span> or another shortcodes 

Я пытаюсь написать сценарий, который будет отправляться по почте, вытащить любые короткие коды формы [component id=X] и обернуть их в другой короткий код следующим образом:

  Some text - could be <span>HTML</span> or other shortcodes .... [components] [component id=12] [component id=13] [component id=14] [/components] .... Some text - could be <span>HTML</span> or another shortcodes 

У меня возникли проблемы с написанием регулярного выражения. Я надеюсь использовать preg_replace_callback() для достижения этого, но не уверен, что это подходящая функция или нет.

Solutions Collecting From Web of "Копирование коротких кодов в другом коротком коде"

Вот сценарий, который я придумал. Он просматривает все сообщения в экземпляре WordPress и разбивает его на три раздела:

  1. HTML / контент перед строкой коротких кодов
  2. Строка коротких кодов
  3. HTML / контент после строки коротких кодов

Я решил использовать substr() для разделения содержимого. Затем я собираю все вместе до конца и включаю «обертку» короткого кода вокруг средней части.

 $args = array( 'numberposts' => -1, 'post_status' => 'publish|draft|trash' ) $posts = get_posts( $args ); if( !empty( $posts ) ){ foreach( $posts as $post ){ $content = $post->post_content; if( !has_shortcode( $content, 'components') ){ $pattern = '/\[component id=\"[0-9]+\"\]/'; preg_match_all( $pattern, $content, $matches, PREG_OFFSET_CAPTURE); $first_match = $matches[0][0]; $first_match_start = $first_match[1]; // Start position of the first match $last_match = $matches[0][ count($matches[0]) - 1 ]; $last_match_start = $last_match[1]; $last_match_end = $last_match_start + strlen($last_match[0]); $before_html = substr($content, 0, $first_match_start); // Get all the content before the first match of [component id="XYZ"] $component_shortcodes = substr($content, $first_match_start, $last_match_end - $first_match_start ); // Get everything in between the first [component id="XYZ"] and the last $after_html = substr($content, $last_match_end ); // Get everything after the last [component id="XYZ"] match // Perform the actual wrapping here $new_content = $before_html . '[components]' . $component_shortcodes . '[/components]' . $after_html; $post->post_content = $new_content; wp_update_post( $post ); } } }