Это может показаться проблемой 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"]
Любая помощь приветствуется.
Я не думаю, что вы хотите возвращаться после каждой итерации — помещать результаты в переменную и просто возвращаться один раз.
$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;
С помощью 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
петля.
Это код, который я закончил использовать. Это смесь различных ответов. Кажется, работает нормально. Руководство ценится.
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;
}