如果类型是使用OAuth的‘Status’,则自动推文

时间:2012-10-29 作者:Edbury

应该很简单-如果帖子格式为“状态”,我希望WP在推特上发布一次帖子的内容(第一次发布时)。

下面的代码没有在发布时返回错误,也没有在推特上或更新帖子元数据,这让我相信我要么使用了错误的钩子,要么检查帖子类型时出现了问题。

这是目前生活在我的功能。php

我在用Matt Harris的tmhOAuth 并且已经成功地从一条独立的推文中发布了推文。php使用下面的大部分函数。

为了安全起见,密钥和机密被移除。

function posse_twitter( $post ) {
    // check post type if necessary
    if ( $post->post_type != \'status\' ) return;

    $post_id = $post->ID;
    $tweet_content = $post->post_content;

    if ( !get_post_meta( $post_id, \'tweeted\', $single = true ) ) {
        // ...run code once
        //Include Libraries
        require \'libraries/tmhOAuth/tmhOAuth.php\';
        require \'libraries/tmhOAuth/tmhUtilities.php\';
        $tmhOAuth = new tmhOAuth(array(
          \'consumer_key\'    => \'XXXXX\',
          \'consumer_secret\' => \'XXXXX\',
          \'user_token\'      => \'XXXXX\',
          \'user_secret\'     => \'XXXXX\',
        ));

        $code = $tmhOAuth->request(\'POST\', $tmhOAuth->url(\'1/statuses/update\'), array(
          \'status\' => $tweet_content
        ));

        if ($code == 200) {
          tmhUtilities::pr(json_decode($tmhOAuth->response[\'response\']));
        } else {
          tmhUtilities::pr($tmhOAuth->response[\'response\']);
        }
        update_post_meta( $post_id, \'tweeted\', true );
    }
}

add_action( \'draft_to_published\', \'posse_twitter\' );

2 个回复
最合适的回答,由SO网友:Edbury 整理而成

$post 在期间不可用{$new_status}_{$post->post_type}, 但是$post_ID 是我们将其传递给函数,然后调用$post 全球范围内。

我也应该使用get_post_format(), 不适用于类型。

在这些更正之后,一切似乎都进展顺利,但需要注意的是,如果帖子在发布之前没有自动保存或保存为草稿,那么$post->post_content 期间仍将为空{$new_status}_{$post->post_type}.

下面是新代码。

function posse_twitter( $post_ID ) {
    global $post;
    // check post type if necessary
    if ( get_post_format( $post->ID ) != \'status\' ) return;

    $post_id = $post->ID;
    $tweet_content = $post->post_content;

    if ( !get_post_meta( $post_id, \'tweeted\', $single = true ) ) {
        // ...run code once
        require \'libraries/tmhOAuth/tmhOAuth.php\';
        require \'libraries/tmhOAuth/tmhUtilities.php\';
        $tmhOAuth = new tmhOAuth(array(
          \'consumer_key\'    => \'XXXX\',
          \'consumer_secret\' => \'XXXX\',
          \'user_token\'      => \'XXXX\',
          \'user_secret\'     => \'XXXX\',
        ));

        $code = $tmhOAuth->request(\'POST\', $tmhOAuth->url(\'1/statuses/update\'), array(
          \'status\' => $tweet_content
        ));

        update_post_meta( $post_id, \'tweeted\', true );
    }
}

add_action( \'publish_post\', \'posse_twitter\' );
方便:Adam Brown\'s API reference

SO网友:doublesharp

我猜你没有{$old_status}_to_{$new_status} 行动,这就是你所追求的draft_to_published - 对于新职位,不能保证“旧”状态实际上是“草稿”。您是否尝试过使用{$new_status}_{$post->post_type} 行动,在你的情况下publish_status?

结束