Come interagire con il post al momento del salvataggio da parte dell’autore?
Come possiamo modificare il contenuto o aggiungere alcune informazioni?
Ecco una breve guida sull’action save_post e il codice spiegato passo passo per te.
Introduzione
L’action save_post (codex: save_post ) è molto utile quando dobbiamo interagire con il contenuto del post. Questa action viene eseguita quando il post viene salvato o aggiornato.
Il codice di utilizzo par agganciarci al save_post è il seguente
add_action( 'save_post', 'custom_save_post');
Quando il post verrà salvato/aggiornato, wordpress richiamerà la nostra funzione custom_save_post dove potremo operare su tutto il contenuto del post tramite la variabile $_POST.
Al trigger dell’action save_post, ci verrà passato anche l’id del post corrente, quindi il codice sarà:
add_action( 'save_post', 'custom_save_post'); function custom_save_post($post_id) { //$post_id è l'id del post che abbiamo salvato. }
Se bloccassimo l’esecuzione, inserendo, ad esempio, questo codice nella funzione custom_save_post
print_r($_POST);die();
al salvataggio del post, quello che vedremo, sarà l’array di tutte le informazioni che abbiamo inserito. Esempio:
array( [_wpnonce] => 765737d007 [_wp_http_referer] => /wp-admin/post.php?post=3069&action=edit&message=1 [user_ID] => 1 [action] => editpost [originalaction] => editpost [post_author] => 47 [post_type] => post [original_post_status] => publish [referredby] => /wp-admin/post.php?post=3069&action=edit [_wp_original_http_referer] => /wp-admin/post.php?post=3069&action=edit [post_ID] => 3069 [meta-box-order-nonce] => c820146900 [closedpostboxesnonce] => 0bdd10ccae [post_title] => Benvenuto [samplepermalinknonce] => 002c1cbc99 [content] => Contenuto del post [wp-preview] => [hidden_post_status] => publish [post_status] => publish [hidden_post_password] => [hidden_post_visibility] => public [visibility] => public [post_password] => [jj] => 19 [mm] => 08 [aa] => 2014 [hh] => 12 [mn] => 23 [ss] => 03 [hidden_mm] => 08 [cur_mm] => 08 [hidden_jj] => 19 [cur_jj] => 28 [hidden_aa] => 2014 [cur_aa] => 2014 [hidden_hh] => 12 [cur_hh] => 11 [hidden_mn] => 23 [cur_mn] => 01 [original_publish] => Aggiorna [save] => Aggiorna [parent_id] => [menu_order] => 1 [advanced_view] => 1 [comment_status] => open [ping_status] => open [add_comment_nonce] => 6f516d8e93 [_ajax_fetch_list_nonce] => eebe45615f [post_name] => benvenuto [post_author_override] => 47 [post_mime_type] => [ID] => 3069 [post_content] => Contenuto del post [post_parent] => 0 )
Come possiamo vedere l’array di esempio contiene tutte le info che stiamo per salvare.
Cosa possiamo fare ora?
Ad esempio possiamo inviare una mail all’amministratore se viene salvato un determinato post type, oppure inserire un postmeta se il post è di una determinata categoria. Insomma abbiamo il pieno controllo su cosa poter implementare…sta a te immaginare cosa
Inviare una mail all’amministratore se il post_type è mail
function custom_save_post($post_id) { //se il post_type è "mail" ed è un nuovo post, inviamo la mail if($_POST['post_type'] == mail && $_POST['hidden_post_status'] == 'draft'){ $post_title = get_the_title( $post_id ); $post_url = get_permalink( $post_id ); $subject = 'Nuovo post'; $message = "Inserito nuovo post:\n\n"; $message .= $post_title . ": " . $post_url; // Send email to admin. wp_mail( 'admin@example.com', $subject, $message ); } }
Salviamo dei post_meta se il post_type è book
function custom_save_post($post_id) { $post_type = 'book'; // Se post_type non è book non aggiorniamo if ($_POST['post_type'] != $post_type ) { return; } // - Aggiorniamo i metadata if ( isset( $_REQUEST['book_author'] ) ) { update_post_meta( $post_id, 'book_author', sanitize_text_field( $_REQUEST['book_author'] ) ); } if ( isset( $_REQUEST['publisher'] ) ) { update_post_meta( $post_id, 'publisher', sanitize_text_field( $_REQUEST['publisher'] ) ); } }
Impostare una categoria di default di un post
function custom_save_post($post_id) { $post_type = 'book'; // Se post_type non è book non aggiorniamo if ($_POST['post_type'] != $post_type ) { return; } // - Aggiorniamo le categorie $post_categories = array(1,2,3); //modificando il numero delel categorie di vostro interesse wp_set_post_categories( $post_id, $post_categories, true ) }
..e questi sono solo 3 esempi…e Tu, quale funzioni richiami all’action save_post?
DETTAGLI
Livello: basso
Compatibilità: testato su WP versione 3.9.2