📜  wp 自定义休息端点 - PHP (1)

📅  最后修改于: 2023-12-03 15:21:15.262000             🧑  作者: Mango

WP 自定义休息端点 - PHP

在 WordPress 中,您可以使用“休息端点”添加可能对您的项目或网站有用的自定义 API 端点。WordPress REST API 入门的一个很好的地方是这个 [Handbook page][rest-api],它提供了有关概念的详细阐述和具体示例。

用例

在已安装应用程序和 WordPress 的情况下,我们将创建一个名为 /wp-json/myplugin/v1/contacts 的休息端点来检索我们的 WordPress 数据库中的联系人。具体来说,我们将使此端点返回所有已发布的“联系人”自定义文章类型的帖子,每个帖子的标题和 META 中的所有内容。

注册 REST API 端点

要在 WordPress 中为您的插件注册 REST API 端点,您需要使用如下代码:

<?php
    // Register REST API endpoint
    add_action('rest_api_init', function () {
        register_rest_route('myplugin/v1', '/contacts', array(
            'methods' => 'GET',
            'callback' => 'myplugin_get_all_contacts'
        ));
    });

    // The endpoint handler function
    function myplugin_get_all_contacts() {
        // Retrieve all "contact" posts
        $query = new WP_Query(array(
            'post_type' => 'contact',
            'post_status' => 'publish',
            'posts_per_page' => -1
        ));

        // Prepare data
        $contacts = array();
        while ($query->have_posts()) {
            $query->the_post();
            $contact = array(
                'title' => get_the_title(),
                'meta' => get_post_meta(get_the_ID())
            );
            $contacts[] = $contact;
        }

        // Return data
        return $contacts;
    }
?>

这个 add_action() 提供了一个回调函数,在初始化 REST API 时添加了新的端点。register_rest_route()带有三个参数:

  1. 它们的端点的名字。在这种情况下,我们将我们的端点放在 /wp-json/myplugin/v1/contacts 中,因此我们使用 “myplugin/v1” 命名空间和 “contacts” 端点。
  2. 请求方法。我们将使用 GET 方法检索数据。
  3. 回调函数。这是我们将在后面定义的代码函数。

在这篇文章中,我们定义了 myplugin_get_all_contacts() 函数,该函数将在端点被请求时执行。此函数使用 WP_Query ( WordPress 中用于查询和检索帖子和其他类型内容的主要工具)查询数据库以检索所有已发布的“联系人”自定义文章类型的内容。然后它准备要返回在 REST API 中的数据,并返回类似于下面的结果:

[
    {
        "title": "John Doe",
        "meta": {
            "email": "johndoe@example.com",
            "phone": "+1 2345678901"
        }
    },
    {
        "title": "Jane Smith",
        "meta": {
            "email": "janesmith@example.com",
            "phone": "+1 0987654321"
        }
    }
]

请注意,meta 数据是作为复杂对象返回的。要进一步改进此代码并返回一些元数据,请参阅 WordPress REST API [官方文档][rest-api].

[rest-api]: https://developer.wordpress.org/rest-api/