web-dev-qa-db-fra.com

Connexion Wordpress Social> Publier sur un mur Facebook d'utilisateurs

J'essaie de publier sur le mur/la timeline d'un utilisateur Facebook actuellement connecté.

J'ai trouvé ceci sur la documentation des auteurs du plugin github: http://miled.github.io/wordpress-social-login/developer-api-apis.html

Je mets le deuxième extrait de code (le code Facebook) dans mon fichier functions.php.

Ensuite, sur l'un de mes fichiers de modèle wordpress, j'ai fait ceci:

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

Le problème, c’est que je n’ai aucune idée de ce que je dois mettre en place de $ hybridauth_user_profile

Quand je var_dump cette variable:

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

Il revient en tant que NULL dans mon fichier de modèle (situé dans le dossier wp-content/themes/mytheme).

J'ai aussi essayé de simplement obtenir le jeton d'accès pour pouvoir utiliser l'API Facebook directement à partir de ce document: http://miled.github.io /wordpress-social-login/developer-api-snippets.html

Malheureusement, même problème, aucune idée où obtenir cette variable $ hybridauth_user_profile.

1
TensGardo

Je ne suis pas un expert en la matière, mais voici:

Après avoir lu du code et fait une recherche globale du filtre, ce n'est pas du tout un filtre, le seul moment où le filtre est appelé est dans une 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 );

Dans ce cas, procédez comme suit: soit dans un fichier de plug-in, soit dans le fichier functions.php de votre thème.

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

Remarque: J'utilise PHP 5 pour intégrer la fonction. Si vous n'avez pas PHP 5 ou si ce code renvoie une erreur, essayez de supprimer la partie fonction et d'en faire une fonction dédiée, puis remplace la partie fonction par une chaîne du nom de la fonction dédiée add_action ('hook', 'function', 10, 3) vs add_action ('hook', function () {}, 10, 3)

Cet exemple publie "Ceci est un message de test" dans le profil des utilisateurs avec le statut étiqueté avec le nom de votre application.

Plus peut être trouvé ici.

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

C'est un très vieux billet mais cette information peut aider beaucoup de gens qui débarquent ici.

N'oubliez pas que vous avez besoin de l'autorisation de l'utilisateur pour publier votre message ou vous obtiendrez un code d'erreur de la part de FB ou de tout autre fournisseur. Vous ne pouvez pas simplement poster sans permission, vous pouvez définir des étendues en faisant exactement le contraire de:

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

Au lieu de réduire la portée à une portée, vous devriez:

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

Cette étendue sera utilisée chaque fois qu'un utilisateur se connectera au réseau social. Par conséquent, si vous ne possédez pas d'autorisation et que vous ne modifiez pas l'étendue après s'être connecté, il devra se déconnecter et se reconnecter pour vous donner l'autorisation.

Vous pouvez forcer tout le monde à vous déconnecter en modifiant les sels du fichier wp-config.php, mais cela peut ou peut ne pas être la meilleure pratique. Je pense qu'avec WordPress 4.1, vous avez une fonction, il suffit de faire une petite recherche sur Google pour ré-authentifier tout le monde lors du prochain chargement de la page.

Je ne peux pas être absolument sûr de cela et je ne l'ai pas testé, mais vous feriez quelque chose comme ceci lorsque vous souhaitez publier d'autres actions appelées sur le site.

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

Ce code particulier chargerait l'adaptateur Facebook et publierait sur son mur Facebook avec l'autorisation, vous pourriez tout faire et faire des choses comme classer 5 étoiles et afficher la classification dans la publication d'état, avec get_comment_meta ($ id, 'rating', true) ;

Rappelez-vous également que le fait que vous ayez demandé l’autorisation d’afficher des statuts sur leur mur ne signifie pas qu’ils doivent vous le donner, c’est le but de la capture d’essai, vous ne savez jamais quand vous avez ou n’avez pas l’autorisation de poster. S'ils refusent l'autorisation, ils seront toujours interceptés avec $ e-> getMessage (). Essayez de faire quelque chose comme un système de journalisation ou retournez simplement null si vous ne vous souciez pas des erreurs de capture.

J'espère que cela t'aides.

2
David Lawrence