WordPress — включая атрибут в шорткод

Это может показаться проблемой 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' );

Если я жестко закодировать идентификатор приложения в качестве $app переменная работает нормально, и если я закомментирую свой код и раскомментирую return... строка возвращает правильный URL. Мой вопрос, как я могу получить $app переменная добавляется к URL и работает через мой шорткод, который

[apprating app="439438619"]

Любая помощь приветствуется.

1

Решение

Я не думаю, что вы хотите возвращаться после каждой итерации — помещать результаты в переменную и просто возвращаться один раз.

$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;
3

Другие решения

С помощью extract() не рекомендуется. Чтобы проверить значения запроса в URL, используйте $_GET.

Следующая сначала проверяет, содержит ли URL ?app_id=something, если это так, результат выдаст его. Если URL не содержит его, будет использован атрибут шорткода [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: как отметил Адам, ваш return должен быть за пределами foreach петля.

1

Это код, который я закончил использовать. Это смесь различных ответов. Кажется, работает нормально. Руководство ценится.

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;
}
0
По вопросам рекламы [email protected]