У меня есть содержимое «Контактной формы 7», которое я получил из поста WP. Это выглядит примерно так:
Your Name (required)
[text* your-name]
Your Email (required)
[email* your-email]
Subject
[text your-subject]
Your Message
[textarea your-message]
[submit "Send"]
Мне нужно разбить этот контент в массив с помощью регулярных выражений. В конце процесса это должно выглядеть так:
$arr = array (
'text* your-name',
'email* your-email',
'text your-subject',
'textarea your-message',
'submit "Send"',
)
У кого-нибудь есть идеи, как это сделать с помощью регулярных выражений или любым другим способом?
Спасибо 🙂
(?<=\[)([^\]]+)
Попробуйте это. Захватите захват. См. Демонстрацию.
http://regex101.com/r/yP3iB0/8
$re = ""(?<=\\[)([^\\]]+)"";
$str = "Your Name (required)\n[text* your-name]\n\nYour Email (required)\n[email* your-email]\n\nSubject\n[text your-subject]\n\nYour Message\n[textarea your-message]\n\n[submit \"Send\"]";
preg_match_all($re, $str, $matches);
Заметка: Извините за ответы на эту тему, созданные давно, но это наверняка поможет другим.
Большинство разработчиков при разработке задачи, связанной с CF7, нуждаются в типе и имени полей, но, как правило, им не удается получить данные, поскольку форма хранится в виде содержимого из-за пользовательского типа записи.
Таким образом, чтобы получить тип, имя, базовый тип и т. Д., Вам нужно получить все сообщения контактной формы.
Вы должны пройтись по каждой публикации в контактной форме и передать содержимое формы в функции сканирования ниже в качестве инструмента
foreach($form as $objForm){
$manager = WPCF7_FormTagsManager::get_instance();
$tags = $manager->scan( $objForm->form );
$filter_result = $manager->filter( $tags, $cond );
foreach ($filter_result as $key => $value) {
echo $value->type;
echo $value->name;
}
}
Надеюсь, это поможет другим 🙂