web-dev-qa-db-fra.com

Comment appeler un REST point de terminaison quand un article est publié?

Je dois faire en sorte que WordPress appelle un noeud final REST spécifique quand un nouveau message est publié, en transmettant les données les plus importantes du message via JSON.

J'ai trouvé un plugin, HookPress, qui apparemment l'a fait en vous permettant de configurer Webhooks pour divers événements. Malheureusement, il n'a pas été mis à jour depuis plus de 2 ans et ne fonctionne pas avec les versions récentes de Wordpress (> 4.6).

Y at-il un moyen que je puisse y parvenir?

3
Marcello

Vous n'êtes pas obligé d'écrire un nouveau plugin. Vous pouvez soit ajouter le code au fichier functions.php de votre thème, soit créer un thème child .

Pour encapsuler vos données au format JSON, vous pouvez utiliser la fonction json_encode. Accrochez-vous au courrier quand il est publié et envoyez les données. Dans la fonction suivante, je vais envoyer le titre, l'extrait et l'URL de l'image sélectionnée au message.

add_action('publish_post', 'call_the_endpoint',10,2);
function call_the_endpoint($post_id, $post){
    // Define an empty array
    $data = array();
    // Store the title into the array
    $data['title'] = get_the_title();
    // If there is a post thumbnail, get the link
    if (has_post_thumbnail()) {
        $data['thumbnail'] = get_the_post_thumbnail_url( get_the_ID(),'thumbnail' );
    }
    // Get the excerpt and save it into the array
    $data['excerpt'] = get_the_excerpt();
    // Encode the data to be sent
    $json_data = json_encode($data);
    // Initiate the cURL
    $url = curl_init('YOUR API URL HERE');
    curl_setopt($url, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($url, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($url, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json_data))
    );
    // The results of our request, to use later if we want.
    $result = curl_exec($url);
}

Il serait possible d'écrire une réponse précise si vous pouviez fournir plus d'informations sur votre API et sur la manière dont vous interagissez avec celle-ci. Cependant, c’était un exemple simple pour vous qui sache comment utiliser le crochet publish_post pour réaliser ce que vous recherchez.

1
Jack Johansson

Vous pouvez utiliser un hook de transition post-status. Dans ce cas, il semble que {status} _ {{post_type} soit le mieux adapté. En supposant que vous parlez de messages:

<?php
/* Plugin Name: Publish to REST
Description: Whenever a Post is published, WP will call a REST endpoint.
*/
add_action('publish_post', 'wpse_send_rest_data', 10, 2);
function wpse_send_rest_data($ID, $post) {
    // Add your code to call the REST endpoint here.
    // The $post object is available so you can send post details.
    // Example: $post->post_title will give you the title.
    // $post->post_excerpt will give you an excerpt.
    // get_permalink($post) will give you the permalink.
}
?>

Dans ce cas, chaque fois qu'une publication de type "Publication" passe au statut "Publier" (par exemple, si elle est nouvelle, ou une mise à jour ou une publication programmée), votre fonction personnalisée est exécutée. Ce type de code convient probablement mieux à un plugin personnalisé, car même si vous modifiez le thème à un moment donné, vous souhaiterez toujours émettre votre appel personnalisé REST.

0
WebElaine