if && Probleme mit transition_post_status

Ich versuche, diese function zum functionieren zu bringen und es scheint nicht zusammen zu funktionieren. Wenn ich gerade habe

$new_status == 'publish' 

es funktioniert, wenn ich nur die zweite benutze funktioniert es auch. Wenn ich versuche, sie zusammenzubringen, scheint es einen Schluckauf zu geben.

Es sollte auch angemerkt werden, dass ich versucht habe, nur die

 add_action ('publish_tweet', 'twitter_run_when_published'); 

aber das hat auch nicht funktioniert.

Hier ist die vollständige function, die ich versuche zu verwenden, es ist von einem Codex-Beispiel

 function intercept_all_status_changes( $new_status, $old_status, $post ) { if ( $new_status == 'publish' && $_POST['post_type'] == 'tweet' ) { // Post status changed twitter_run_when_published (); } } add_action( 'transition_post_status', 'intercept_all_status_changes', 10, 3 ); 

Das twitter_run_when_published funktioniert. Ich weiß das, weil individuell die If / Condition funktioniert.

Einige Macken: Die function funktioniert, wenn ich sofort veröffentliche. Es funktioniert nicht, wenn ich einen zukünftigen Post plane.

Zusätzliche Informationen, die mir helfen könnten, versuchten diese im Code, sie funktionierten nicht.

 add_action('publish_tweet', 'twitter_run_when_published'); //possible alts to make it happen only once and not double down add_action('new_to_publish_tweet', 'twitter_run_when_published'); add_action('draft_to_publish_tweet', 'twitter_run_when_published'); add_action('pending_to_publish_tweet', 'twitter_run_when_published'); add_action('future_to_publish_tweet', 'twitter_run_when_published'); add_action('auto-draft_to_publish_tweet', 'twitter_run_when_published'); add_action('private_to_publish_tweet', 'twitter_run_when_published'); add_action('inherit_to_publish_tweet', 'twitter_run_when_published'); add_action('trash_to_publish_tweet', 'twitter_run_when_published'); 

Nur das Publizieren führt sofort die oben genannte function aus.

Das klassische Beispiel funktioniert.

 function intercept_all_status_changes( $new_status, $old_status, $post ) { if ( $new_status != $old_status) { // Post status changed twitter_run_when_published (); } } add_action( 'transition_post_status', 'intercept_all_status_changes', 10, 3 ); 

Dadurch wird die function jedoch mehrfach ausgetriggers. Es funktioniert nicht im Plugin, wird aber sicher im Theme funktionieren.

Was vermisse ich? Ich möchte es so haben, dass, wenn ein Artikel veröffentlicht wird und es den benutzerdefinierten Post-Typ-Tweet erfüllt, dass es eine function ausführt.

EDIT: Ich habe ein bisschen herumgewälzt und versucht, ein paar schlecht formulierte Sätze zu klären.

Solutions Collecting From Web of "if && Probleme mit transition_post_status"

Ihre ursprüngliche function beruht darauf, dass $_POST['post_type'] auf den entsprechenden Wert gesetzt ist. Als allgemeine Regel sollten Sie die Verwendung globaler Variablen vermeiden. Wenn Sie nur die function verwenden möchten, die Ihnen die function gibt, müssen Sie nicht über die Kontexte nachdenken, in denen sie aufgerufen werden sollten.

In diesem Fall ist das passiert. $_POST['post_type'] function stützt sich auf eine globale Variable $_POST['post_type'] , und während dies in einem ‘Zustand’ funktioniert (Veröffentlichung eines Beitrags), geschieht dies nicht in einem anderen (Cron-Job, Aktualisierung eines Posts). Kurz gesagt, $_POST['post_type'] ist nicht immer das, was Sie denken, dass es sein sollte.

Folgendes ruft den Post-Typ aus der übergebenen $post Variablen ab:

 function intercept_all_status_changes( $new_status, $old_status, $post ) { if ( $new_status == 'publish' && get_post_type( $post ) == 'tweet' ) { // Post status changed twitter_run_when_published (); } } add_action( 'transition_post_status', 'intercept_all_status_changes', 10, 3 );