0

我想在不使用任何插件的情况下在 Facebook 上自动发布我的 WP 博客的所有文章。

我写了一些工作代码来做到这一点,这没关系......但我还需要仅在发布新文章时调用此代码(不适用于修订或自动保存)。

这是您需要查看的我的 function.php 文件的一部分:

add_action( 'save_post', 'koolmind_facebook_post_article',3 );
function koolmind_facebook_post_article( $post_id ) {
    /* configuration of facebook params */
    ....
    ....
    /* end config */

    if ( !wp_is_post_revision( $post_id ) && !wp_is_post_autosave( $post_id ) ) {

        /* retrieve some data to publish */

        /* invoke my code to publish on facebook */
    }
}

一旦我点击“添加新文章”,我的代码就会被调用,并且一个空的草稿被发送到我的 Facebook 页面。此外,只要我在文章正文中插入一个字符,就会触发自动保存,并且会再次将新帖子(几乎是空的)发送到 facebook。

我只想阻止这种自动发布并仅在按下 PUBLISH 按钮时将我的数据发送到 facebook。

那可能吗?


更新

最后我发现了问题。我的 fb 代码中有一个错误。现在的问题是在更新我的帖子时避免多次发布。

这是现在的代码:

add_action('pending_to_publish', 'koolmind_facebook_post_article');
add_action('draft_to_publish', 'koolmind_facebook_post_article');
add_action('new_to_publish', 'koolmind_facebook_post_article');

function koolmind_facebook_post_article( $post_id ) {
require_once 'facebook/facebook.php';

/* some code here */

//verify post is not a revision
if ( !wp_is_post_revision( $post_id ) ) {
        $post_title = get_the_title( $post_id );
    $post_url = get_permalink( $post_id );
    $post_excerpt = get_the_excerpt();
    $post_image = 'http://.../default.jpg'; //default image

        if( $thumb_id = get_post_thumbnail_id( $post_id ) ){
            $image_attributes = wp_get_attachment_image_src( $thumb_id );
            $post_image = $image_attributes[0];
        } 

        /* some code here */
    }
}

让我解释一下这个问题:

如果我使用这 3 个钩子我没有问题,但是代码是在我的特色图像存储到数据库之前执行的,所以 $post_image 总是等于默认图像。

如果我改用 publish_post 钩子,则特色图像设置正确(可能是因为在保存所有数据后调用了此钩子),但如果我更新我的帖子(wp_is_post_revision 似乎没有被解雇),我无法避免将数据发送到 Facebook。

希望您有一个好主意...现在代码几乎可以了!:)

4

2 回答 2

1

'save_post' 挂钩'在数据保存到数据库后运行'。这意味着您可以执行此验证:

//WP hook
//the last parameter 2 means you pass 2 variables to the callback:
//the ID and the post WP object 
add_action( 'save_post', 'koolmind_facebook_post_article',3,2 );

//Callback
function koolmind_facebook_post_article( $post_id, $post ) {

// Validation:

    //If current WP user has no permissions to edit posts: exit function
    if( !current_user_can('edit_post', $post_id) ) return;

    //If is doing auto-save: exit function
    if( defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE ) return;

    //If is doing auto-save via AJAX: exit function
    if( defined( 'DOING_AJAX' ) && DOING_AJAX ) return;

    //If is a revision or an autosave version or anything else: exit function
    if( $post->post_status != 'publish') return;

    /* configuration of facebook params */

    /* invoke my code to publish on facebook */

}

它对我有用。

于 2013-08-14T17:46:25.353 回答
0

尝试使用:

add_action('publish_post', 'koolmind_facebook_post_article');
于 2012-12-30T09:38:44.323 回答