by karlosky | Lis 24, 2014 | Pluginy, Własne typy wpisów
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ą...