Când să folosești hook-ul pentru postări trimise la gunoi
Vreau să execut o acțiune când șterg unul din tipurile mele de postări custom, care hook ar trebui să folosesc:
wp_trash_mycpt
sau
trash_mycpt
Acțiunea mea ar trebui să ruleze doar când mycpt este în starea 'publish', 'draft' sau 'future' și este mutat în starea 'trash'. Când este șters definitiv din gunoi, nu mai este necesar să ruleze funcția din nou.
Hook-ul wp_trash_post ar putea fi ceea ce cauți:
Se declanșează înainte ca un articol să fie trimis la gunoi.
De asemenea, există și hook-ul trashed_post:
Se declanșează după ce un articol a fost trimis la gunoi.
Iată niște cod netestat pentru a începe:
function my_wp_trash_post( $post_id ) {
$post_type = get_post_type( $post_id );
$post_status = get_post_status( $post_id );
if ( $post_type == 'mycpt' && in_array(
$post_status, array( 'publish','draft','future' )
)) {
// fă ce ai de făcut
}
}
add_action( 'wp_trash_post', 'my_wp_trash_post' );
Funcția wp_trash_post() nu schimbă post_status în trash înainte de a apela hook-ul wp_trash_post?
David Gard
Nu, după. Doar uită-te la cod.
montrealist
Bine că s-a schimbat atunci. Îmi amintesc că am verificat acum câțiva ani și nu era cazul!
David Gard
@dalbaeb Până acum am folosit hook-ul trash_post, care este diferența între acesta și wp_trash_post?
urok93
De asemenea, nu ar fi mai bine să folosești wp_trash_mycpt în loc să verifici tipul de postare în cadrul funcției?
urok93
@drtanz Pentru că trash_post este depreciat. De asemenea, nu pot găsi un hook variabil pentru acest tip de acțiune (ai vreun link?), așa că wp_trash_post este într-adevăr cea mai bună opțiune pe care o ai.
montrealist
Iată un tichet similar: http://core.trac.wordpress.org/ticket/15628
De fapt, eu folosesc trash_mycpt în plugin-ul meu și funcționează bine, așa că am presupus că wp_trash_mycpt va funcționa și el.
urok93
Rulează funcția ta când statusul postării se schimbă din oricare dintre publish, draft sau future în trash.
<?php
function my_function() {
global $post;
if('my_post_type' == $post->post_type) {
// faci operațiunile tale aici
}
}
add_action('publish_to_trash', 'my_function');
add_action('draft_to_trash', 'my_function');
add_action('future_to_trash', 'my_function');
Mai multe informații: Tranziții de Status pentru Postări
Există o acțiune wp_trash_post care este apelată, dar post_status este schimbat în trash înainte, ceea ce înseamnă că nu veți putea verifica dacă Postarea a fost publicată, etc.
EDITARE Mă corectez, post_status este schimbat în trash DUPĂ ce acțiunea este apelată.
Acest cod ar trebui să vă ajute să începeți -
add_action('wp_trash_post', 'my_wp_trash_post')
function my_wp_trash_post(){
if($post->post_type === 'mycpt') :
// Faceți aici orice aveți nevoie să faceți
endif;
}
Dacă vă este de folos, există și o acțiune delete_post. Pentru mai multe informații, consultați Referința de Acțiuni pentru delete_posts.