这可能看起来像Wordpress问题,但我认为它是PHP专用而不是Wordpress。我的问题在于// Code
块。这是我的代码:
function display_app_rating( $atts ) {
// Attributes
extract( shortcode_atts(
array(
'app' => '',
), $atts )
);
// Code
//return '"http://itunes.apple.com/lookup?id='.($app).'"';
$json_url = '"http://itunes.apple.com/lookup?id='.($app).'"';
$json = file_get_contents($json_url);
$result = json_decode($json, TRUE);
foreach ($result['results'] as $key => $value) {
return '<p class="appstore rating">Average rating '.$value['averageUserRating'].' out of 5 from '.$value['userRatingCount']. ' users.</p><p class="appstore price">Current Price '.$value['currency'].$value['price'].'</p>';
}
}
add_shortcode( 'apprating', 'display_app_rating' );
如果我将应用ID作为$app
变量进行硬编码,则可以正常工作,如果我将代码注释掉并取消注释return...
行,则会返回正确的网址。我的问题是如何将$app
变量附加到URL并通过我的短代码工作
[apprating app="439438619"]
任何帮助表示感谢。
答案 0 :(得分:3)
我不认为你想在每次迭代后返回 - 将结果推送到变量中并返回一次。
$result = json_decode($json, TRUE);
$block = '';
foreach ($result['results'] as $key => $value) {
$block .='<p class="appstore rating">Average rating '.$value['averageUserRating'].' out of 5 from '.$value['userRatingCount']. ' users.</p><p class="appstore price">Current Price '.$value['currency'].$value['price'].'</p>';
}
return $block;
答案 1 :(得分:1)
使用extract()
is not recommended。要检查网址中的查询值,请使用$_GET
。
以下首先检查URL是否包含?app_id=something
,如果是,结果将输出它。如果网址不包含该网址,则会使用短代码属性[apprating app="something"]
。否则,它会输出错误消息:
add_shortcode( 'apprating', 'shortcode_so_25877611' );
function shortcode_so_25877611( $atts, $content )
{
$args = shortcode_atts(
array(
'app' => '',
),
$atts
);
$result = 'No app id.';
$app = (int) $args['app'];
if( !empty( $_GET['app_id'] ) )
$result = (int) $_GET['app_id'];
elseif( $app )
$result = $app;
$json_url = "http://itunes.apple.com/lookup?id=$result";
return $return;
}
帖子上的测试短代码如下,然后将查询var附加到URL:
With id: [apprating app="1234"]
Without: [apprating]
PS:noted by Adam,return
必须在foreach
循环之外。
答案 2 :(得分:0)
这是我用完的代码。它是各种反应的混合物。似乎工作正常。指导赞赏。
add_shortcode( 'myrating', 'display_my_app_rating_89' );
function display_my_app_rating_89( $atts, $content )
{
$args = shortcode_atts(
array(
'app' => '',
),
$atts
);
$result = 'No app id.';
$app = (int) $args['app'];
if( !empty( $_GET['app_id'] ) )
$result = (int) $_GET['app_id'];
elseif( $app )
$result = $app;
$json_url = "http://itunes.apple.com/lookup?id=$result";
//normal PHP version commented out and wordpress version activated - appears to be Wordpress best practice.
//$json = file_get_contents($json_url);
//wordpress version
$json = wp_remote_retrieve_body (wp_remote_get($json_url));
$result = json_decode($json, true);
$block = '';
foreach ($result['results'] as $key => $value) {
$block .='<span> ... whatever I wanted to return from JSON URL plus my HTML here ... </span>';
}
return $block;
}