Când să folosești hook-ul pentru postări trimise la gunoi

15 mar. 2013, 17:31:32
Vizualizări: 14.6K
Voturi: 6

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.

0
Toate răspunsurile la întrebare 3
8
12

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' );
15 mar. 2013 17:47:25
Comentarii

Funcția wp_trash_post() nu schimbă post_status în trash înainte de a apela hook-ul wp_trash_post?

David Gard David Gard
15 mar. 2013 17:51:27

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

montrealist montrealist
15 mar. 2013 17:59:11

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

David Gard David Gard
15 mar. 2013 18:04:17

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

urok93 urok93
15 mar. 2013 19:12:06

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 urok93
15 mar. 2013 19:13:48

@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 montrealist
15 mar. 2013 20:44:43

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 urok93
16 mar. 2013 06:46:39

Link-ul nu menționează trash_mycpt nicăieri. Ok, deci dacă totul funcționează bine, atunci te rog spune-mi, care a fost rostul întrebării tale?

montrealist montrealist
17 mar. 2013 00:20:54
Arată celelalte 3 comentarii
1

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

15 mar. 2013 17:48:13
Comentarii

Acestea sunt utile, dar cred că wp_trash_post/trash_post vor fi suficiente în cazul meu, deoarece nu am nevoie de acest nivel de control de fapt.

urok93 urok93
15 mar. 2013 19:14:55
1

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.

15 mar. 2013 17:47:50
Comentarii

Nu ar fi mai bine să folosești wp_trash_mycpt în loc să verifici tipul de postare în funcție?

urok93 urok93
15 mar. 2013 19:13:14