web-dev-qa-db-fra.com

REST alerte quand un nouveau post Wordpress est publié ou mis à jour

J'ai une application personnalisée PHP et une instance Wordpress s'exécutant en tant que 2 bases de code complètement distinctes sur le même serveur. Je souhaite que mon application personnalisée PHP puisse utiliser le contenu de l'instance Wordpress au fur et à mesure de sa publication ou de sa mise à jour.

J'utilise l'excellente API WP pour récupérer les publications Wordpress encodées en JSON à partir de mon instance Wordpress. Ce plugin peut récupérer toutes les publications ou une publication individuelle (spécifiée par id).

Cela implique actuellement d'interroger activement l'instance Wordpress pour toutes les publications, puis de déterminer celles qui sont nouvelles ou qui ont été modifiées, ce qui n'est pas idéal.

Je voudrais que Wordpress prévienne mon application PHP quand un nouveau message est créé ou mis à jour. Je me rends compte qu'il existe de nombreux plugins de notification par courrier électronique pour Wordpress (le meilleur étant de meilleures notifications pour Wordpress ). Mais je ne veux pas la surcharge d'avoir à exécuter un serveur SMTP et à analyser le contenu du courrier électronique.

Je recherchais une solution utilisant simplement REST pour envoyer une demande POST ou GET à mon application, en passant l'ID de la publication Wordpress (récemment publiée ou mise à jour). Je ne suis au courant d'aucune fonctionnalité intégrée de Wordpress ni de plug-in existants permettant d'atteindre cet objectif.

1
Richard

Utilisez l'API HTTP HTTP pour envoyer un "ping" à l'action wp_insert_post, qui est déclenchée chaque fois qu'une publication est créée/mise à jour:

/**
 * @param   int     $post_id    The ID of the post.
 * @param   WP_Post $post       The post object.
 * @param   bool    $update     True if the post already exists and is being updated
 */
function wpse_185340_post_ping( $post_id, $post, $update ) {
    if ( $post->post_status === 'publish' ) { // Only fire when published
        wp_remote_post(
            'http://example.com/application/notify',
            array(
                // https://codex.wordpress.org/HTTP_API
                'blocking' => false, // If you don't need to know the response, disable blocking for an "async" request
                'body' => array(
                    'post_id' => $post_id,
                    'post'    => json_encode( $post ),
                    'update'  => ( int ) $update,
                    // or whatever
                )
            )
        );
    }   
}

add_action( 'wp_insert_post', 'wpse_185340_post_ping', 10, 3 );
0
TheDeadMedic