Как установить глобальную переменную в functions.php

15 янв. 2013 г., 01:02:27
Просмотры: 46.4K
Голосов: 5

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

<?php $thumbSmall = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'small' );
$urlSmall = $thumbSmall['0']; ?>

<?php echo $urlSmall; ?>

Однако я хочу использовать переменную $urlSmall и в других местах, а не только в шаблоне главной страницы, и здесь мои ограниченные навыки программирования подводят меня. Я попробовал просто скопировать и вставить

wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'small' );
$urlSmall = $thumbSmall['0'];

в мой functions.php, но это не сработало. Мне нужно, чтобы эти переменные распознавались глобально. Что мне делать? Написать какую-то функцию?

2
Комментарии

Это скорее вопрос по PHP, чем по WordPress, ИМХО

shea shea
15 янв. 2013 г. 07:20:45

Это означает, что...

Josef Ulander Josef Ulander
15 янв. 2013 г. 20:49:49
Все ответы на вопрос 2
2

Вы можете преобразовать ваш сниппет в функцию, которая возвращает URL миниатюры записи:

function wpse81577_get_small_thumb_url( $post_id ) {
    $thumbSmall = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), 'small' );
    return $thumbSmall['0'];
}

Использование, передавая ID записи:

<?php echo wpse81577_get_small_thumb_url( 59 ); ?>
15 янв. 2013 г. 02:16:18
Комментарии

Круто, но как мне динамически получить ID записи в <?php echo wpse81577_get_small_thumb_url( 59 ); ?>, я хочу использовать это в цикле?

Josef Ulander Josef Ulander
15 янв. 2013 г. 20:39:26

Например: wpse81577_get_small_thumb_url( $post->ID );, wpse81577_get_small_thumb_url( get_the_ID() );, ...

diggy diggy
15 янв. 2013 г. 20:54:20
3

Чистый вопрос по PHP, на самом деле.

global $urlSmall;
$urlSmall = $thumbSmall['0'];

Если вы объявляете переменную с помощью ключевого слова global при её инициализации, она будет доступна в дальнейшем. Вы можете, так сказать, импортировать её с помощью...

global $urlSmall;
var_dump($urlSmall);

Того же можно достичь, присваивая ключи/значения напрямую массиву $GLOBALS.

$GLOBALS['urlSmall'] = $thumbSmall['0'];

Это, кажется, самый прямой ответ на вопрос:

Мне нужно, чтобы эти переменные были глобально доступны. Что мне здесь делать?

Однако могут существовать и более оптимальные способы обработки данных.

15 янв. 2013 г. 02:18:26
Комментарии

Хорошо, у меня вроде бы работает! Но s_ha_dum, как я могу достичь чего-то подобного без использования глобальных переменных?

Josef Ulander Josef Ulander
15 янв. 2013 г. 20:41:02

Извините, моя ошибка, я поторопился - это не решило мою проблему. Когда я следую вашим советам и добавляю global $urlSmall; var_dump($urlSmall); в шаблон главной страницы, на странице просто выводится NULL.

Josef Ulander Josef Ulander
15 янв. 2013 г. 20:48:50

Если вам нужен глобальный доступ к переменным, вам придётся использовать глобальные переменные. Другой вариант - собрать функцию, как предложено в другом ответе. Я не знаю, почему у вас не получается. Это работает. Вы должны убедиться, что файл, где определена переменная, выполняется до того, как вы попытаетесь её использовать - возможно, в этом проблема.

s_ha_dum s_ha_dum
15 янв. 2013 г. 21:34:43