Создание поста на основе данных, внесенных в форму через плагин Contact Form 7 в WordPress
Все чаще сталкиваюсь с задачами, когда необходимо записать данные из формы в новый пост. Например, функционал вопросов-ответов на сайте, когда строим его на основе «один вопрос/ответ — один пост».
Можно сделать и на основе комментариев, но для меня достаточно сложным является изменение формы контактов для конкретной страницы + добавить новые поля к постам намного проще, чем к форме комментариев.
Делать функционал будем на основе плагина Form to Post и его хуков + стандартный функционал WordPress по добавлению постов.
Все действия производим в файле functions.php, который находится в корне вашей темы, добавляя хуки.
- Устанавливаем плагин Contact Form 7
- Устанавливаем плагин Form to Post. Его функционал позволяет работать и без хуков в functions.php, но если нужно заполнить определенные поля, метаинформацию, то хуки необходимы
- 1234567891011121314151617181920212223242526272829add_filter( 'form_to_post_form_data', 'delfiFormToPostFormData', 10, 1 );function delfiFormToPostFormData( $form_data ) {if ($form_data->posted_data['_wpcf7'] == 212) { // Проверяем, что если id формы равно 212//Задаем заголовок поста$form_data->posted_data['post_title'] = substr($form_data->posted_data['message'], 0, 50);//Заполняем мета поляif(!empty($form_data->posted_data['yname'])) {$form_data->posted_data['meta_author'] = $form_data->posted_data['yname'];}if(!empty($form_data->posted_data['email'])) {$form_data->posted_data['meta_email'] = $form_data->posted_data['email'];}if(!empty($form_data->posted_data['message'])) {// В тело поста передаем данные из поля message$form_data->posted_data['post_content'] .= $form_data->posted_data['message'];}}return $form_data;}add_filter('form_to_post_before_create_post', 'delfiFormToPostSetValues');function delfiFormToPostSetValues($post) {$post['post_status'] = 'pending'; // Задаем статус для поста$post['post_category'] = array(2); // Задаем ID категории, в которую будет занесен постreturn $post;}
Создаем два хука, в одном из них указали в какую категорию размещать пост и второй — статус поста. Эти поля можно передать напрямую в форме, но это не безопасно, т.к. злоумышленник сможет поменять эти значения.
Второй хук заполняет мета поля, задает заголовок поста.
В целом, можно минуя хуки указать просто название полей в форме, такие как post_title, post_content, meta_email (Будет занесено в мета поле email) и другие (читайте документацию плагина). Хуки позволяют более детально настроить записываемые данные.
Комментарии к Создание поста на основе данных, внесенных в форму через плагин Contact Form 7 в WordPress (2)
Stanislav
Приветствую. С форматами записей не сталкивался, но, думаю, можно посмотреть https://developer.wordpress.org/reference/functions/wp_insert_post/ и в функцию delfiFormToPostSetValues добавить параметр с форматом поста.
Alex Korneev
А вот как прописать в функцию прикрепления к посту заполненной PDF формы (которое создает дополнение заполнятель PDF форм для Contact Form 7), в качестве миниатюры к посту, или прикрепленного изображения. Почему плагин POST TO FORM предупреждает о невозможности прикрепления изображения…?