Intereting Posts
На второй панели инструментов в tinymce установлен «display: none»? Переменные ссылочные типы сообщений Добавление слайдера изображения в заголовок моего сайта Добавление стиля css в главное навигационное меню на дочерних страницах Истекает срок действия заголовков Доступ к метатесту после публикации Пользовательские типы сообщений: пользовательские столбцы с подменю Title? Показать название категории и три последних сообщения внутри категории WordPress, пользовательский тип сообщения и помощь по запросу сообщений! Пользовательский отдельный Single.php Как удалить p теги * вставки *? Отключение `wpautop` удаляет ручные теги Не удается войти, если активна только двадцать пятнадцатая тема добавьте динамический идентификатор для wp_nav_menu после и до Тестовые файлы для разработки плагинов Изменение глобальных переменных – инициализация в index.php, но использование в header.pho

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

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

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 ); } } }