Utiliser Wordpress et Symfony ensemble (French)

2013-12-29

  symfony    french    wordpress 

Sur mon temps de travail chez Ekino, j'ai eu l'occasion de travailler sur une sandbox pour pouvoir utiliser Wordpress et Symfony ensemble et ce travail est maintenant disponible en open-source sur le compte Github d'Ekino.

Grâce à ces outils, vous aurez ainsi la possibilité de :

  • Ajouter des routes Symfony à votre blog Wordpress,
  • Manipuler Wordpress depuis Symfony,
  • Utiliser des services Symfony dans Wordpress,
  • Déclencher des évènements Symfony depuis les hooks Wordpress,
  • Toute autre idée qui peut vous passer par la tête.

Cette sandbox se compose donc d'un bundle Symfony et d'un plug-in Wordpress.

Les étapes d'installation du bundle Symfony ainsi que du plugin sont disponibles sur les pages Github respectives :

Utilisez Symfony depuis Wordpress

À l'intérieur de votre blog Wordpress, il vous est ainsi possible d'appeler n'importe quel service accessible depuis le conteneur d'injection de dépendance de Symfony de cette façon :


$service = symfony_service('my.custom.symfony.service');
$service->doSomething();

Plutôt sympa et facile, non ? Attendez donc, ce n'est pas tout.

Vous pouvez également déclencher des évènements Symfony via le composant EventDispatcher à partir des hooks Wordpress de cette façon :


/**
 * User login hook
 */
add_action('wp_login', 'ekino_wordpress_symfony_hook_wp_login', 10, 2);

/**
 * Dispatch Wordpress user login hook on Symfony event dispatcher
 *
 * @param string   $user_login Username of user logged in
 * @param \\WP_User $user       Wordpress user object
 *
 * @see http://codex.wordpress.org/Plugin_API/Action_Reference/wp_login
 */
function ekino_wordpress_symfony_hook_wp_login($user_login, $user) {
    $event = new \\Ekino\\WordpressBundle\\Event\\WordpressEvent(array(
        'user_login' => $user_login,
        'user'       => $user
    ));

    symfony_event_dispatch('ekino.wordpress.user_login', $event);
}

Notre évènement Symfony sera donc déclenché à chaque login d'un utilisateur sur notre blog Wordpress.

Voyons maintenant ce que nous pouvons faire dans l'autre sens.

Utilisez Wordpress depuis Symfony

Tout d'abord, vous pouvez ajouter des URLs qui pointeront sur votre application Symfony à votre blog, simplement en déclarant une route et un controller qui sera "attrapé" avant votre application Wordpress :


class AuthenticationController extends Controller
{
    /**
     * My custom route action
     *
     * @Route("/my-custom-route", name="custom_route")
     */
    public function customAction()
    {
        ...
        return $this->render('MyCustomBundle:Custom:template.html.twig');
    }

Enfin, vous pouvez également manipuler la base de données de Wordpress depuis Symfony en utilisant les managers mis à votre disposition dans le bundle de la façon suivante :


$postManager = $this->get('ekino.wordpress.manager.post');
$userManager = $this->get('ekino.wordpress.manager.user');

$user = $userManager->find(2);

$post = $postManager->find(1);
$post->setAuthor($user);

$postManager->save($post);

Dans cet exemple, nous modifions l'auteur de l'article qui porte l'identifiant 1 avec l'utilisateur d'identifiant 2.

Pour aller plus loin ...

Notez que vous pouvez également accéder au WebProfiler de Symfony qui vous fournit des informations utiles sur votre application.

J'ai monté une instance de démonstration accessible ici : http://wordpress.composieux.fr.

Pour plus d'informations, n'hésitez pas à me contacter et également à contribuer au projet via Github.

Comments