it-gundan.com

예약 된 게시물에 대해 publish_post 후크가 작동하지 않습니다.

나는 wp-to-twitter에 문제가있어, 내 wordpress.org 사이트에 이메일을 보냈던 '보류 중'으로 설정된 게시물에 연결되는 Tweet 링크를 게시했습니다. 이메일에는 내 휴대 전화 번호가 포함 된 바닥 글이 포함되어 있습니다.

나는 내 자신의 플러그인을 만들기로 결정했다.

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);
    }

}

내 플러그인은 간단한 플러그인이며, 내 bit.ly 함수를 호출 한 다음 다른 함수로 트윗을 호출합니다.이 함수는 다른 곳에서 사용되고 완벽하게 작동합니다.

내 문제는 내가 아무것도 게시하지 않는 일정을 잡으면 새로운 소식에 게시를 클릭하면 흰색 화면이 표시되지만 짹짹이 전송된다는 것입니다.

예약 된 게시물을 올바르게 타겟팅하려면 어떻게해야합니까? 내 $_POST 데이터를 살펴 봤는데 괜찮아 보인다. 코드는 매우 직설적 인 것처럼 보입니다. 그래서 나는 뭔가를 놓치고 있습니다.

편집하다:

나는 WordPress가 예정된 게시물과 어떻게 작동하는지에 대해 혼란 스럽다. post_status='future' 시간이 올 때 게시물을 게시해야 할 때, 분명히 더 이상 미래의 게시물이 아니므로 post_status='publish'가된다. 그래서 내 기능은 때 트리거해야합니다

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

이러한 동작이 트리거됩니다. post_status가 'future'로 유지되면 날짜가지나 갔는지 확인해야합니까?

1
Benny

게시물을 게시 할 예정이므로 if 상태를 확인하기 위해 if 문을 제거하는 기능을 추가했습니다 (다른 버전 추가). 다시 확인하지 않아도됩니다.

/* 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);
}

그런 다음이 버전에 대해 다음과 같은 후크를 사용할 수 있습니다.

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

publish_future_post - 문서화 된 것은별로 좋지 않습니다. 후크가 발생했습니다.

후크는 check_and_publish_future_post () 를 호출합니다. 추가 정보를 원하면 링크 된 정보를 읽으십시오. 게다가 그것과 같은 후크는 기대할 것입니다.

2
Nicolai

저는 add_action ('transition_post_status', 'my_action');을 사용했으며, 직접 또는 미래에 게시 된 두 게시물 모두에 유용합니다. 함수 my_action 존재 :

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

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