web-dev-qa-db-ja.com

Wordpressのソーシャルログイン>ユーザーに投稿Facebookのウォール

現在ログインしているFacebookユーザーのウォール/タイムラインに投稿しようとしています。

私はこれをプラグイン作者githubのドキュメントで見つけました: http://miled.github.io/wordpress-social-login/developer-api-apis.html

私は自分のfunctions.phpファイルにコードの2番目の断片(Facebookコード)を入れました。

それから私のワードプレスのテンプレートファイルの一つで、私はこれをしました:

apply_filters('wsl_hook_process_login_before_wp_set_auth_cookie', get_current_user_id(), "Facebook", ???);

つまり、$ hybridauth_user_profileの代わりに何を入力すればよいのかわかりません。

その変数をvar_dumpすると、

global $hybridauth_user_profile;
echo "HELLO WORLD: ";
var_dump($hybridauth_user_profile);

それは私のテンプレートファイル(wp-content/themes/mythemeフォルダにあります)でNULLとして返されます。

私はまたアクセストークンを取得しようとしたので、この文書から直接Facebook APIを使用することができます。 http://miled.github .io/wordpress-social-login/developer-api-snippets.html

残念ながら同じ問題です。この$ hybridauth_user_profile変数をどこで取得するかはわかりません。

1
TensGardo

これについては専門家ではありませんが、ここに行きます:

なんらかのコードを読んでフィルタのグローバル検索を行った後、そのフィルタはまったくフィルタではなく、そのフィルタが呼び出されるのはdo_actionの中だけです。

    // HOOKABLE: This action runs just before logging the user in (before creating a WP cookie)
    do_action( "wsl_hook_process_login_before_wp_set_auth_cookie", $user_id, $provider, $hybridauth_user_profile );

    // DEPRECIATED: as of 2.2.3
    // do_action( 'wsl_hook_process_login_before_set_auth_cookie', $user_id, $provider, $hybridauth_user_profile );

この場合は、プラグインファイルまたはテーマのfunctions.phpファイルのいずれかで次のことを行います。

add_action( 'wsl_hook_process_login_before_wp_set_auth_cookie', function( $user_id, $provider, $hybridauth_user_profile ){
    // $user_id is the ID of the WP User Object or in other words the users ID on your site.
    // $provider is the provider in which you are working with
    // $hybridauth_user_profile is a instance of the social media profile information: IE: $hybridauth_user_profile->email. This variable stores all profile information for the adapter, such as facebook.
    if( 'Facebook' != $provider ){
        return;
    }

    include_once( WORDPRESS_SOCIAL_LOGIN_ABS_PATH . '/hybridauth/Hybrid/Auth.php' );

    try
    {
        $provider = Hybrid_Auth::getAdapter( 'Facebook' ); 

        # https://developers.facebook.com/docs/graph-api/reference/v2.2/user/feed
        $response = $provider->api()->post( 'https://graph.facebook.com/v2.0/me/feed', array(
            'message' => 'This is a test message',
        ));
    }
    catch( Exception $e )
    {
        // Do some logging or something, in this example we echo the error.
        echo "Ooophs, we got an error: " . $e->getMessage();
    }
}, 10, 3 );

注意PHP 5を使用して関数をインライン化しています。または、PHP 5がエラーを返さない場合は、関数部分を削除して専用関数にしてください。関数部分を専用の関数名add_action( 'hook'、 'function'、10、3)vs add_action( 'hook'、function(){}、10、3)の文字列で置き換えます。

この例では、「これはテストメッセージです」というステータスをユーザー名に、アプリ名でラベル付けして投稿しています。

ここでもっと見つけることができます。

http://miled.github.io/wordpress-social-login/developer-api-apis.html

これはかなり古い投稿ですが、この情報はここに着陸する人々の多くを助けることができます。

あなたが投稿するにはユーザーからの許可が必要であることを忘れないでください。あなたは許可なく投稿することはできません、あなたは正反対のことをすることで範囲を設定することができます

function wsl_lower_default_permissons( $provider_scope, $provider ){
    if( 'facebook' == strtolower( $provider ) ){
        $provider_scope = 'email'; // should not be empty or it will be overwritten
    }

    if( 'google' == strtolower( $provider ) ){
        $provider_scope = 'profile'; // should not be empty or it will be overwritten
    }

    return $provider_scope;
}

add_filter( 'wsl_hook_alter_provider_scope', 'wsl_lower_default_permissons', 10, 2 );

範囲を1つの範囲に縮小する代わりに、次のようにします。

$provider_scope .= ', scope1, scope2, scope3'
return $provider_scope;

このスコープは、ユーザーがソーシャルネットワークにログインするたびに使用されるため、ユーザーがログインした後に権限がなく、スコープを変更した場合は、ログアウトして再度ログインして権限を付与する必要があります。

Wp-config.phpファイルのsaltを変更することで、全員に強制的にログアウトさせることができますが、これはベストプラクティスかもしれません。私はwordpress 4.1であなたが機能を持っていると信じています、ちょうど次のページロードで全員を再認証する方法についてちょっとグーグル検索をしてください。

私は絶対にこれを確信することができず、私はそれをテストしていませんが、サイト上で呼び出された他のアクションに投稿したいときはあなたはこのようなことをするでしょう。

add_action( 'wp_insert_comment', function( $id, $comment ){

    include_once( WORDPRESS_SOCIAL_LOGIN_ABS_PATH . '/hybridauth/Hybrid/Auth.php' );

    try
    {
        $provider = Hybrid_Auth::getAdapter( 'Facebook' ); 

        # https://developers.facebook.com/docs/graph-api/reference/v2.2/user/feed
        $response = $provider->api()->post( 'https://graph.facebook.com/v2.0/me/feed', array(
            'message' => "I just posted on this cool website, heres what i said:\r\n" . $comment->comment_content,
        ));
    }
    catch( Exception $e )
    {
        // Do some logging or something, in this example we echo the error.
        echo "Ooophs, we got an error: " . $e->getMessage();
    }
}, 10, 2 );

この特定のコードは、facebookアダプタをロードし、与えられた許可を得てfacebookの壁に投稿します。外出して、5つ星の評価やステータス投稿に評価を表示するなどの操作をget_comment_metaで実行できます;

また、自分のステータスを壁に投稿する許可を要求したからといって、それを許可する必要があるという意味ではありません。つまり、try catchの目的ではありません。許可を拒否した場合は、常に$ e-> getMessage()で捕捉されます。ロギングシステムのようなことをするか、エラーを捕らえたくない場合は単にnullを返してください。

お役に立てれば。

2
David Lawrence