WordPress API 传递电子邮件参数问题

WordPress API passing email argument issue

使用 WordPress REST API 自定义端点,我尝试使用 functions.php 文件中的以下代码获取用户数据(或至少是用户 ID):

    function getUser(WP_REST_Request $request) {
    global $wpdb;
    $email = $request->get_param( 'email' );    
    $query = "SELECT * FROM wp_users WHERE user_email = $email";
    $result = $wpdb->get_results($query);
    return $result;
}


    add_action( 'rest_api_init', function () {
    register_rest_route( 'myapi/v1', '/getcustomer/(?P<email>[^/]+)', array(
        'methods' => 'GET',
        'callback' => 'getUser'
        ) );
    } );

正在使用端点 /wp-json/myapi/v1/getcustomer/joe@anymail.com 测试函数,它 returns 带有空括号 [ ]。我在这里错过了什么吗?任何帮助将不胜感激。

您的代码存在多个问题:

  1. 您应该对您的用户电子邮件进行编码或通过 POST 方法发送。
  2. 您当前的查询开放给 SQL Injection
  3. 您的值必须用引号引起来。现在它转换为 .. WHERE user_email = joe@anymail.com 即 SQL 语法错误。

因此您的代码应如下所示:

$query = "SELECT * FROM wp_users WHERE user_email = %s";
$result = $wpdb->get_results($wpdb->prepare($query, $email));