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