如何使用WordPress短代码API结合coinmarketcap API进行过滤

问题描述 投票:1回答:1

所以我正在使用coinmarketcap api并尝试将其与WordPress结合使用。

在WordPress中我使用以下php代码:

function api() {
$url = 'https://api.coinmarketcap.com/v1/ticker/?start=0&limit=250';
$response = wp_remote_get( esc_url_raw( $url ) );
$api_response = json_decode( wp_remote_retrieve_body( $response ), true );
$name = $api_response[1]["name"];
$usd = $api_response[1]["price_usd"];
echo $name . "<br />";
echo $usd;
}
add_shortcode( 'api_short', 'api' );

所以这段代码正常工作,我通过使用短代码api_short在WordPress页面上获得了我的结果。

我现在的问题是我想通过以下方式使用短代码:

[api short name =“20”]

这样我只需使用短代码就可以轻松切换数据,而不是一直改变代码。

在这种情况下,'name'变量是加密货币的名称,如下所示:https://api.coinmarketcap.com/v1/ticker/?start=0&limit=250。 0 =比特币,1 =以太坊。

我希望有人知道如何使这个工作,我尝试了一些事情,但到目前为止没有结果。

可以在这里找到WordPress短代码文档:https://codex.wordpress.org/Shortcode_API

php wordpress api
1个回答
0
投票

一些东西:

First:

为您的功能添加前缀 - 特别是如果您使用的是具有全局范围或吸引力的名称。

api()应该真的像solaiman_api()一样,以防止任何冲突。

Second:

您应该使用WP Transients API来缓存结果,因此您不会对CMC API进行速率限制

Third:

对于问题的实际答案,您只需要在URL中参数化输入值。

function solaiman_api( $atts ) {
    extract( shortcode_atts( array(
        'placeholder' => ''
    ), $atts ) );

    $coin  = $atts['coin'] ? $atts['coin'] : 0; // Default to 0 for BTC
    $limit = $atts['limit'] ? $atts['limit'] : 250; // Default to 250

    $url = 'https://api.coinmarketcap.com/v1/ticker/?start='. $coin .'&limit='. $limit;

    $response     = wp_remote_get( esc_url_raw( $url ) );
    $api_response = json_decode( wp_remote_retrieve_body( $response ), true );

    foreach( $api_response as $c ){
        echo $c['name'].': $'.$c['price_usd'].'<br />';
    }
}
add_shortcode( 'cmc_api', 'solaiman_api' );

注意我更改了您的函数名称和短代码,因为api_short不是非常具有描述性。

这个短代码现在看起来像这样:

[cmc_api coin="1" limit="1"]

哪个应该只给你以太坊的价格。

Use This Code Instead:

根据CMC的服务条款,这是一个更好的将结果缓存10分钟的方法:

function solaiman_api( $atts ) {
    extract( shortcode_atts( array(
        'placeholder' => ''
    ), $atts ) );

    $coin  = $atts['coin'] ? $atts['coin'] : 0; // Default to 0 for BTC
    $limit = $atts['limit'] ? $atts['limit'] : 250; // Default to 250

    $url = 'https://api.coinmarketcap.com/v1/ticker/?start='. $coin .'&limit='. $limit;

    $transient_name = 'cmc_api_'.$coin.'_'.$limit; // One transient per coin per limit

    if( false === ( $response = get_transient( $transient_name ) ) ){
        $response = wp_remote_get( esc_url_raw( $url ) );
        set_transient( $transient_name, $response, 600 ); // Cache for 10 minutes
    }

    $api_response = json_decode( wp_remote_retrieve_body( $response ), true );

    foreach( $api_response as $c ){
        echo $c['name'].': $'.$c['price_usd'].'<br />';
    }
}
add_shortcode( 'cmc_api', 'solaiman_api' );

你可以在这里看到[cmc_api coin="1" limit="1"]的一个例子:http://xhynk.com/headless/2018/02/28/cmc-test/

© www.soinside.com 2019 - 2024. All rights reserved.