[Contact Form 7] Zapisywanie wiadomości z formularza jako własne wpisy

Plugin Contact Form 7 to bardzo popularna wtyczka formularza kontaktowego. Posiada bardzo duże możliwości konfiguracji, przez co jest bardzo użyteczna i uniwersalna. Niestety, w standardzie nie posiada niektórych funkcji, które wydają się obowiązkowe dla tego typu modułów, np. zapisywanie wiadomości przesyłanych przez formularz.

Moją propozycją sposobu zapisu wiadomości przesyłanych przez formularz wiadomości jest utworzenie nowego typu wpisów (custom post type) oraz zapisywanie każdej wiadomości jako nowy wpis. W tym celu musimy utworzyć nowy typ wpisu, np. „request”.

add_action('init', 'register_request_post_type');

function register_request_post_type() {
  register_post_type(
    'request', array(
      'label' => 'Requests',
      'description' => 'Our Requests',
      'public' => false,
      'show_ui' => true,
      'show_in_menu' => true,
      'capability_type' => 'post',
      'map_meta_cap' => true,
      'hierarchical' => false,
      'rewrite' => array('slug' => 'request', 'with_front' => false),
      'query_var' => true,
      'supports' => array('title', 'editor'),
      'labels' => array (
        'name' => 'Requests',
        'singular_name' => 'Request',
        'menu_name' => 'Requests',
        'add_new' => 'Add new request',
        'add_new_item' => 'Add new request',
        'edit' => 'View message',
        'edit_item' => 'View message',
        'new_item' => 'New request',
        'search_items' => 'Search request',
        'not_found' => 'Not found',
        'not_found_in_trash' => 'Not found in trash'
      )
    )
  );
}

Kolejnym krokiem jest utworzenie funkcji zapisującej dane z formularza jako wpis utworzonego wcześniej typu. Funkcja ta musi być podpięta do funkcji wysyłania formularza wtyczki Contact Form 7.

add_action( 'wpcf7_mail_sent', 'save_request' );

function save_request( $cf7 ){
	
	$submission = WPCF7_Submission::get_instance();
  
    if ( $submission ) {
        $posted_data = $submission->get_posted_data();
    }
	
	$content = '
	From: '.$posted_data['name'].' ('.$posted_data['email'].')

	Message Body:
	'.$posted_data['message'];
	
	$new_request = array(
		'post_type' 	=> 'request',
		'post_title'    => $posted_data['name'] . ' ('.$posted_data['email'].')',
		'post_content'  => $content,
		'post_status'   => 'private',
		'post_author'   => 1
	);

	wp_insert_post( $new_request );
}

Tak utworzona funkcja zapisuje każdą wiadomość wysyłaną formularzem. Wiadomości te widoczne są w zakładce „Request” jako lista wpisów.

4 komentarze

  1. Witaj. Wypróbowałem Twój sposób, ale po dodaniu funkcji save_request() do functions.php po stronie frontu i backendu biały ekran…
    A tak poza tym – tego właśnie szukam:):) Pzdr

    Reply
    • Proponowałbym włączyć debugowanie i podejrzeć wyświetlane błędy. Dopiero wtedy będzie można zlokalizować problem.

      Reply
  2. Witam,
    Jest możliwość abyś napisał czy trzeba utworzyć plik PHP z danymi które umieściłes? Pod jaką nazwa i gdzie w kleic. Przepraszam za pytanie ale początkujący jestem.
    Pozdrawiam

    Reply
    • Kod powinien być wklejony w pliku functions.php aktywnego szablonu.

      Reply

Submit a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *