如何将第三方API结果插入Wordpress页面/内容?

时间:2019-05-01 22:48:53

标签: wordpress

我有一个CURL方法,用于通过GitBash调用第三方API:

curl -u "xxx@dxwxcxrp.com:hPhO4IXXXXXYM2zXXXXX" -X GET -H "Content-Type: application/json" "https://dxwxcxrp.atlassian.net/rest/api/3/search?jql=created>=startOfMonth()&key=DCHC01&startAt=1&maxResults=1&fields=id,key"

结果将是这样的:

{
   "expand":"names,schema",
   "startAt":1,
   "maxResults":1,
   "total":31,
   "issues":[
      {
         "expand":"operations,versionedRepresentations,editmeta,changelog,renderedFields",
         "id":"28648",
         "self":"https://dxwxcxrp.atlassian.net/rest/api/3/issue/28648",
         "key":"DCHC01-7059"
      }
   ]
}

我们如何在Wordpress网站上显示此内容?我们需要为此创建一个插件吗?还是有其他易于实现的方法?

2 个答案:

答案 0 :(得分:1)

取决于您要在哪里显示它,以及(有时)网站的构建方式。您可以使用shortcodes,它只需要在functions.php中使用一个函数(并注册回调),或者可以构建一个小插件。如果您希望它在每次页面加载时都运行,并且您不担心API速率限制,则可能最容易实现短代码解决方案。

上面链接的示例的修改:

function startOfMonth()
{
    return 1;
}

// [dcpartners_json]
function dcpartners_json($atts)
{
    $ch = curl_init();
    $startOfMonth = startOfMonth()
    $auth = "xxx@dxwxcxrp.com:hPhO4IXXXXXYM2zXXXXX"

    curl_setopt($ch, CURLOPT_URL, "https://dxwxcxrp.atlassian.net/rest/api/3/search?jql=created>=$startOfMonth&key=DCHC01&startAt=1&maxResults=1&fields=id,key")
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-type: application/json'])
    curl_setopt($ch, CURLOPT_USERPWD, $auth);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $json = curl_exec($ch);
    curl_close();

    return $json;
}

add_shortcode('dcpartners_json', 'dcpartners_json');

那只会吐出一个JSON字符串,而不是HTML。

答案 1 :(得分:0)

WordPress已经为您提供了使用wp-api进行此操作的机会。
我强烈建议您阅读有关项目here的更多有用的详细信息。 我确实相信,如果您尝试实现一个简单的get请求并想要处理wordpress,则应该以WP方式进行处理。以您想要的方式集成数据将更加简单。 (SQL表,插件,对自定义模板的原始调用。)

实用解决方案(未测试)

$args = array ('headers' => array(
    'Authentication' => 'xxx@dxwxcxrp.com:hPhO4IXXXXXYM2zXXXXX' //YOU NEED TO ADAPT TO YOUR AUTHENTICATION (BASIC, AUTH2, etc)
    'Content-Type' => 'application/json'
    )
);
$rawData = wp_remote_get('https://dxwxcxrp.atlassian.net/rest/api/3/search?jql=created>=startOfMonth()&key=DCHC01&startAt=1&maxResults=1&fields=id,key', $args);
$data = json_decode( wp_remote_retrieve_body( $rawData ), true );

var_dump($data);
$startAt = $data['startAt'];
echo $startAt; //Should be 1