【问题标题】:How do you retrieve data from an external api in a wordpress plugin?如何从 wordpress 插件中的外部 api 检索数据?
【发布时间】:2017-02-24 12:16:50
【问题描述】:

我正在 wordpress 中创建一个插件,它将根据从 api 接收到的数据创建自定义帖子。起初我有这个代码:

    $stuff_request    = 'https://thisdomain/api/stuff';
    $username = 'thisdomainuser';
    $password = 'thisdomainpassword';

  $headers = array( 'Authorization' => 'Basic ' . base64_encode( "$username:$password" ) );
  $stuff_response = wp_remote_get( $stuff_request, array( 'headers' => $headers ));

  $stuff_data = json_decode($stuff_response, true);

但我收到了错误 “期望参数 1 是给定的字符串数组” 这向我暗示 $stuff_response 可能已经以正确的格式返回,所以我从季节数据中删除了 json_decode

    $stuff_data = $stuff_response;

但这根本无法返回任何内容,并且调试中没有出现错误消息。这是我如何将 api 调用到插件中的问题,还是外部 api 的问题?

【问题讨论】:

  • var_dump($stuff_response);
  • 或 print_r($stuff_response);
  • 感谢已将此添加到我的插件中,我将返回 null

标签: php json wordpress


【解决方案1】:

wp_remote_get 返回的响应是一个数组。

试试这个:

$stuff_request    = 'https://thisdomain/api/stuff';
$username = 'thisdomainuser';
$password = 'thisdomainpassword';

$headers = array( 'Authorization' => 'Basic ' . base64_encode( "$username:$password" ) );
$stuff_response = wp_remote_get( $stuff_request, array( 'headers' => $headers));
if( is_array($stuff_response ) ) {

  $header = $stuff_response['headers']; // array of http header lines
  $body = json_decode( $stuff_response['body'] ); // use the content

}

【讨论】:

  • 谢谢,我已经更新了我的代码以匹配上面的代码,并使用了上面建议的 var_dump,我发现我返回一个空值,有什么想法吗?
  • var_dump($body); 返回 null?
  • 是的,这是否意味着我试图引入的 json 有问题?因为我相信现在的调用是正确的?
  • 尝试在wp_remote_get 调用后立即添加:if ( is_wp_error( $result ) ) { $error_string = $result->get_error_message(); echo '<div id="message" class="error"><p>' . $error_string . '</p></div>'; }。这应该让我们知道是否有错误。否则,如果这很清楚,则很可能是另一台服务器上的问题或授权问题。
  • 激活插件时出现的消息是“插件在激活期间生成了 147 个字符的意外输出。如果您发现“标头已发送”消息、联合提要问题或其他问题,请尝试停用或删除此插件”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多