0

プラグインを使用せずに、WPブログのすべての記事をFacebookに自動公開したいと思います。

私はそれを行うためにいくつかの実用的なコードを書きました、そしてそれは大丈夫です...しかし私は新しい記事を公開するときだけこのコードを呼び出す必要があります(改訂や自動保存のためではありません)。

それはあなたが見る必要がある私の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ページに送信されます。さらに、記事の本文に1つの文字を挿入するとすぐに、自動保存がトリガーされ、新しい投稿(ほとんど空)がFacebookに再度送信されます。

この自動公開をブロックし、[公開]ボタンを押したときにのみデータを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フックを使用すると、注目の画像が適切に設定されます(おそらく、すべてのデータが保存された後にこのフックが呼び出されるため)が、投稿を更新するとFacebookへのデータ送信を回避できません(wp_is_post_revisionは起動されないようです)。

あなたが良い考えを持っていることを願っています...今、コードはほとんどOKです!:)

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 に答える