所以我正在使用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 =&#34; 20&#34;]
这样我只需使用短代码就可以轻松切换数据,而不是一直改变代码。
&#39;名称&#39;在这种情况下,变量是加密货币的名称,如下所示:https://api.coinmarketcap.com/v1/ticker/?start=0&limit=250。 0 =比特币,1 =以太坊。
我希望有人知道如何让这个工作,我尝试了一些事情,但到目前为止没有结果。
可以在此处找到WordPress短代码文档:https://codex.wordpress.org/Shortcode_API
答案 0 :(得分:0)
一些事情:
在您的功能前缀 - 特别是如果您使用的是具有全球范围或吸引力的名称。
api()
应该与solaiman_api()
一致,以防止任何冲突。
您应该使用WP Transients API来缓存结果,这样您就不会对CMC API进行速率限制
对于问题的实际答案,您只需要在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"]
哪个应该只给你以太坊的价格。
根据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/