it-swarm.com.de

der publish_post-Hook funktioniert nicht für geplante Posts

Ich hatte ein kleines Problem damit, dass wp-to-Twitter einen Tweet veröffentlichte, der auf einen Beitrag verweist, der als "ausstehend" festgelegt wurde und den ich per E-Mail an meine wordpress.org-Site gesendet hatte. Die E-Mail enthielt eine Fußzeile mit meiner Handynummer.

Ich habe beschlossen, mein eigenes Plugin zu erstellen.

add_action('publish_post', 'tcr_Tweet');

/* the function */
function tcr_Tweet($postID)
{

    if( ( $_POST['post_status'] == 'publish' ) && ( $_POST['original_post_status'] != 'publish' ) ) {
            /* get the post that's being published */
            $post = get_post($postID); 
            $post_title = $post->post_title;

            /* get the author of the post */
            $author_id=$post->post_author;
            /* author needs a twitterid in their meta data*/
            $author = get_the_author_meta('twitterid',$author_id );

            /* get the permalink and shorten it */
            $url = get_permalink($postID);
            $short_url = getBitlyUrl($url);

            //check to make sure the Tweet is within the 140 char limit
            //if not, shorten and place Ellipsis and leave room for link. 
                    if (strlen($post_title) + strlen($short_url) > 100) {
                       $total_len = strlen($post_title) + strlen($short_url);
                       $over_flow_count = $total_len - 100;
                       $post_title = substr($post_title,0,strlen($post_title) - $over_flow_count - 3);
                       $post_title .= '...';                
                    }

            //add in the shortened bit.ly link
            $message =  "New: ".$post_title." - ".$short_url." by @".$author." #hashtag";

             if ( $post->post_status != 'publish' ) return;
            //call the Tweet function to Tweet out the message
            goTweet($message);
    }

}

mein plugin ist ein einfaches plugin, es ruft meine bit.ly funktion und dann eine andere funktion auf, die tweets, diese funktion werden woanders verwendet und funktionieren einwandfrei.

Mein Problem ist, dass, wenn ich einen Beitrag plane, nichts getwittert wird. Wenn ich auf einen neuen Beitrag klicke, wird ein weißer Bildschirm angezeigt, aber ein Tweet wird gesendet.

Wie kann ich geplante Posts korrekt ausrichten? Ich habe mir meine $_POST Daten angesehen und es scheint in Ordnung zu sein. Code scheint ziemlich einfach zu sein, also fehlt mir etwas .. danke

Bearbeiten:

Ich habe einige Verwirrung darüber, wie WordPress mit geplanten Beiträgen funktioniert. post_status='future', wenn die Zeit gekommen ist und der Beitrag live geschaltet werden muss, wird er sicherlich zu post_status='publish', da er kein "zukünftiger" Beitrag mehr ist. also sollte meine funktion ausgelöst werden wenn

 add_action('publish_post', 'tcr_Tweet'); 
 add_action('publish_future_post', 'tcr_Tweet'); 
 add_action('future_to_publish', 'tcr_Tweet');

diese Aktionen werden ausgelöst. Muss ich stattdessen überprüfen, ob das Datum verstrichen ist, wenn post_status als 'future' bleibt?

1
Benny

Ich habe meine Funktion überarbeitet (eine weitere Version hinzugefügt), um die if-Anweisung zur Überprüfung des Post-Status zu entfernen, da sich herausstellt, dass der Post nicht erneut überprüft werden muss.

/* the function */
function tcr_Tweet2($postID)
{

            /* get the post that's being published */
            $post = get_post($postID); 
            $post_title = $post->post_title;

            /* get the author of the post */
            $author_id=$post->post_author;
            /* author needs a twitterid in their meta data*/
            $author = get_the_author_meta('twitterid',$author_id );

            /* get the permalink and shorten it */
            $url = get_permalink($postID);
            $short_url = getBitlyUrl($url);

            //check to make sure the Tweet is within the 140 char limit
            //if not, shorten and place Ellipsis and leave room for link. 
                    if (strlen($post_title) + strlen($short_url) > 100) {
                       $total_len = strlen($post_title) + strlen($short_url);
                       $over_flow_count = $total_len - 100;
                       $post_title = substr($post_title,0,strlen($post_title) - $over_flow_count - 3);
                       $post_title .= '...';                
                    }

            //add in the shortened bit.ly link
            $message =  "New: ".$post_title." - ".$short_url." by @".$author." #hashtag";

             if ( $post->post_status != 'publish' ) return;
            //call the Tweet function to Tweet out the message
            goTweet($message);
}

Ich kann dann den folgenden Haken nur für diese Version verwenden und es funktioniert.

 add_action('future_to_publish', 'tcr_Tweet2');
3
Benny

Es gibt einen zusätzlichen Aktions-Hook für geplante Posts: publish_future_post - es ist jedoch nicht sehr gut dokumentiert. Es gibt Vorkommen des Hakens in:

Der Hook ruft check_and_publish_future_post () auf. Lesen Sie die verlinkten Informationen, wenn Sie sich weiter informieren möchten. Außerdem funktioniert der Haken so, wie man es erwarten würde.

2
Nicolai

Ich habe add_action ('transition_post_status', 'my_action'); verwendet und es funktioniert hervorragend für beide Posts, die direkt oder in Zukunft veröffentlicht werden. Die Funktion my_action ist:

function my_action ($new_status, $old_status, $post) {

    if (($old_status != 'publish') && ($new_status == 'publish')) {
        // doing things.
    }
}