发布帖子时如何调用REST端点?

时间:2017-06-09 作者:Marcello

发布新帖子时,我需要让WordPress调用特定的REST端点,通过JSON传递最重要的帖子数据。

我发现了一个名为HookPress的插件,它可以让您为各种事件配置webhooks。不幸的是,它已经两年多没有更新过了,不能与Wordpress的最新版本配合使用(>4.6)。

我有没有办法做到这一点?

2 个回复
最合适的回答,由SO网友:Johansson 整理而成

您不必编写新插件。您可以将代码添加到主题的functions.php 文件,或创建child theme.

要以JSON格式包装数据,可以使用json_encode 作用发布后挂接到帖子中,并发送数据。在下面的函数中,我将把帖子的标题、摘录和特色图片URL发送到端点。

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);
}
如果您能够提供有关API以及如何与API交互的更多信息,那么就有可能写出准确的答案。然而,这是一个简单的示例,让您知道如何使用publish_post 钩住你想要的东西。

SO网友:WebElaine

您可以使用post状态转换挂钩。在这种情况下,听起来{status}{post\\u type}可能是最合适的。假设你在谈论帖子:

<?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.
}
?>
在这种情况下,任何时候,“post”类型的帖子转换为“Publish”状态(可能是全新的、更新的或预定的帖子),您的自定义功能都将执行。这种类型的代码可能最适合自定义插件,因为即使您在某个时候更改了主题,也可能仍然希望进行自定义REST调用。

结束

相关推荐

Send/Publish a Post front end

我使用此代码创建一个页面,用户可以在前端发送帖子,但我有一个问题。。当我单击“提交”时,什么都没有发生。哪里错了?<?php /* Template Name: Rate Wine Form */ ?> <?php if( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'