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
?

Nu, după. Doar uită-te la cod.

Bine că s-a schimbat atunci. Îmi amintesc că am verificat acum câțiva ani și nu era cazul!

@dalbaeb Până acum am folosit hook-ul trash_post, care este diferența între acesta și wp_trash_post?

De asemenea, nu ar fi mai bine să folosești wp_trash_mycpt în loc să verifici tipul de postare în cadrul funcției?

@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.

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.

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
.
