Chiamare una Funzione Dopo la Creazione di un Nuovo Post per un Custom Post Type di WordPress?

6 set 2010, 15:57:09
Visualizzazioni: 15.3K
Voti: 8

Supponiamo che abbia creato un nuovo post type 'product'. Esiste un modo per eseguire una funzione (creata dall'utente) quando questo nuovo post 'product' viene creato?

1
Commenti

@dotty: Qualcuna di queste risposte qui sotto ti ha aiutato a risolvere il problema? In caso affermativo, per favore votala per ringraziare le persone che ti hanno aiutato e seleziona la risposta migliore in modo che la tua domanda non rimanga nell'elenco di quelle "senza risposta".

MikeSchinkel MikeSchinkel
10 set 2010 23:32:47
Tutte le risposte alla domanda 3
2

In functions.php:

function mynewproduct(){
    myfunction();
}
add_action( 'new_product', 'mynewproduct' );

Per maggiori informazioni e la documentazione ufficiale, fare riferimento qui:

http://codex.wordpress.org/Post_Status_Transitions

7 set 2010 15:15:50
Commenti

Non credo che new_{post_type} funzionerà perché lo status nell'azione {status}_{post_type} non verrà mai impostato su new.

Spencer Spencer
8 lug 2015 05:24:12

In questo caso è utile sapere cosa si intende con 'creato'

Tom J Nowell Tom J Nowell
8 lug 2015 15:33:50
0

Ciao @dotty:

Dai un'occhiata alla fine della funzione wp_insert_post() nel file /wp-includes/post.php (righe 2148 fino a 2392 in WordPress 3.0.1. Nota che WordPress utilizza questa funzione sia per aggiungere che per aggiornare i post.)

Alla fine contiene il seguente codice. Da questo codice puoi identificare la chiamata a wp_transition_post_status() (ne parleremo più avanti) e abbiamo gli hook di azione edit_post, post_updated, save_post e wp_insert_post (francamente non so perché abbiamo gli ultimi due invece di uno solo.) Puoi usare quelli appropriati alle tue esigenze:

<?php
wp_transition_post_status($data['post_status'], $previous_status, $post);
if ( $update ) {
  do_action('edit_post', $post_ID, $post);
  $post_after = get_post($post_ID);
  do_action( 'post_updated', $post_ID, $post_after, $post_before);
}
do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);
return $post_ID;

E come ha menzionato @Jan Fabry, ci sono gli hook di azione presenti in wp_transition_post_status() (righe 2713 fino a 2717 di /wp-includes/post.php in WordPress 3.0.1.) Nota che ce ne sono tre; usa quelli appropriati:

<?php
function wp_transition_post_status($new_status, $old_status, $post) {
  do_action('transition_post_status', $new_status, $old_status, $post);
  do_action("${old_status}_to_$new_status", $post);
  do_action("${new_status}_$post->post_type", $post->ID, $post);
}
7 set 2010 04:55:24
2

La funzione wp_transition_post_status verrà chiamata, e questo attiverà l'azione "${new_status}_$post->post_type", quindi se un product passa allo stato publish, verrà attivata l'azione publish_product.

6 set 2010 16:12:01
Commenti

Quindi assegno la mia funzione all'azione publish_product?

dotty dotty
6 set 2010 16:48:13

@dotty: Puoi farlo, ma se un utente crea un prodotto ma non clicca ancora "Pubblica", questo hook non verrà attivato. Potrebbe essere o non essere quello che vuoi.

Jan Fabry Jan Fabry
6 set 2010 18:09:19