PHP - 包括短代码中的属性

时间:2014-09-16 20:12:34

标签: php wordpress shortcode

这可能看起来像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"]

任何帮助表示感谢。

3 个答案:

答案 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 Adamreturn必须在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;
}