Apelarea unei Funcții după Crearea unui Post Nou pentru un Tip Personalizat de Post în WordPress?

6 sept. 2010, 15:57:09
Vizualizări: 15.3K
Voturi: 8

Să presupunem că am creat un nou tip de post 'product'. Există vreo modalitate de a executa o funcție (definită de utilizator) când acest nou post 'product' a fost creat?

1
Comentarii

@dotty: Te-au ajutat vreunul dintre răspunsurile de mai jos să rezolvi problema? Dacă da, te rugăm să le votezi pozitiv pentru a mulțumi persoanele care ți-au oferit ajutor și să alegi cel mai bun răspuns, astfel încât întrebarea ta să nu rămână în lista "nerăspunsă".

MikeSchinkel MikeSchinkel
10 sept. 2010 23:32:47
Toate răspunsurile la întrebare 3
2

În functions.php:

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

Pentru mai multe detalii și documentația oficială, consultați aici:

http://codex.wordpress.org/Post_Status_Transitions

7 sept. 2010 15:15:50
Comentarii

Nu cred că new_{post_type} va funcționa deoarece status în acțiunea {status}_{post_type} nu va fi niciodată setat la new.

Spencer Spencer
8 iul. 2015 05:24:12

În acest caz, este util să știm ce se înțelege prin 'creat'

Tom J Nowell Tom J Nowell
8 iul. 2015 15:33:50
0

Bună @dotty:

Uită-te la sfârșitul funcției wp_insert_post() din fișierul /wp-includes/post.php (pe liniile 2148 până la 2392 în WordPress 3.0.1. Reține că WordPress utilizează această funcție atât pentru adăugarea, cât și pentru actualizarea postărilor.)

La final, are următorul cod. Din acest cod poți identifica apelul către wp_transition_post_status() (mai multe despre asta în continuare) și avem action hook-urile edit_post, post_updated, save_post și wp_insert_post (sincer, nu știu de ce avem ultimele două în loc de doar unul.) Poți folosi oricare dintre acestea care se potrivesc nevoilor tale:

<?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;

Și cum a menționat @Jan Fabry, există action hook-urile găsite în wp_transition_post_status() (pe liniile 2713 până la 2717 din /wp-includes/post.php în WordPress 3.0.1.) Reține că sunt trei; folosește-le pe cele potrivite:

<?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 sept. 2010 04:55:24
2

Funcția wp_transition_post_status va fi apelată, iar aceasta va declanșa acțiunea "${new_status}_$post->post_type", deci dacă un product trece în starea publish, acțiunea publish_product va fi declanșată.

6 sept. 2010 16:12:01
Comentarii

Deci eu atribui funcția mea acțiunii publish_product?

dotty dotty
6 sept. 2010 16:48:13

@dotty: Poți face asta, dar dacă un utilizator creează un produs dar nu apasă încă pe "Publică", acest hook nu va fi declanșat. Poate fi sau nu ceea ce dorești.

Jan Fabry Jan Fabry
6 sept. 2010 18:09:19