Отображение аватара в сайдбаре

Приветствую!

Составляю код для отображения в сайдбаре изображения автора через функцию get_avatar на странице одиночной записи. Пока есть такое:

<?php if (is_single())
{
echo "<ul><li class=\"widget\"><h2 class=\"widgettitle\">Author</h2><ul>";
echo get_avatar('the_author_ID();', '80', 'http://site.com/files/<?php the_author_ID(); ?>.jpg');
the_author();
echo "</ul></li></ul>";
}
?>

По идее должно брать из паки files изображение с номером, который соот-т ID автора. На деле получается адрес изображения:

http://site.com/files/?php_the_author_ID;_?_jpg&s=80

Помогите пожалуйста с этой вставной функцией адреса изображения.

Это тоже не помогает:

<?php if (is_single())
{
$par = the_author_ID();
echo "<ul><li class=\"widget\"><h2 class=\"widgettitle\">Author</h2><ul>";
echo get_avatar('the_author_ID();', '80', 'http://site.com/files/'.$par.'.jpg');
the_author();
echo "</ul></li></ul>";
}
?>

пришел к более простому варианту, но все равно проблема вывысти the_author_ID внутри echo.

<?php if (is_single())
{
echo "<ul><li class=\"widget\"><h2 class=\"widgettitle\">Author</h2><ul>";
echo "<img src=\"http://site.com/files/the_author_ID();.jpg\"><br>";
the_author();
echo "</ul></li></ul>";
}
?>

Решение:

<?php if (is_single())
{
echo "<ul><li class=\"widget\"><h2 class=\"widgettitle\">Author</h2><ul>";
echo "<img src=\"http://site.com/files/";
the_author_ID();
echo ".jpg\"><br>";
the_author();
echo "</ul></li></ul>";
}
?>

Тяжелый случай. Смотрим Кодекс http://codex.wordpress.org/Template_Tags/the_author_ID : Displays the unique numeric user ID и далее This tag must be used within The Loop. Понимаете? Не возвращает, а выводит. И имеет смысл только внутри Цикла. Да если бы и возвращала, то такое
echo "<img src=\"http://site.com/files/the_author_ID();.jpg\"
все равно ни в какие ворота не лезет. Пишем так:

<img src="http://site.com/files/<?php the_author_ID(); ?>.jpg" />

и не удивляемся, если все равно не работает. Ибо стоит в сайдбре, а не в Цикле.
Тогда делаем по-человечески, то есть в Цикле пишем

<?php $authorID = get_the_author_ID(); ?>

а в сайдбаре уже так

<?php if (is_single()) : ?>
<ul><li class="widget"><h2 class="widgettitle">Author</h2><ul>
<img src="http://site.com/files/<?php echo $authorID ?>.jpg" /><br>
<?php the_author(); ?>
</ul></li></ul>
<?php endif; ?>

Возможно, в зависимости от метода подключения сайдбара, понадобится добавить

global $authorID;

Еще раз повторю английскую поговорку. Сел на велосипед – крути педали. В смысле – учи PHP.

PS the_author() в сайдбаре тоже под сомнением.

да, тяжелый случай. пхп учить придется, да. 😉

хм, а вот так кстати заработало:

<?php if (is_single()) : ?>
<ul><li class="widget"><h2 class="widgettitle">Author</h2>
<ul style="text-align:center;">
<img src="http://site.com/files/<?php the_author_ID(); ?>.jpg" /><br>
<?php the_author(); ?>
</ul>
</li></ul>
<?php endif; ?>

Спасибо!

Поздравляю! Имейте в виду, что если после Цикла и перед этим кодом что-то поменяет значение глобальных переменных, может возникнуть забавная ситуация. Так что код шаблонозависимый, можно сказать.

2 шаблона – переделывались с кубрика и sandbox – работают 🙂

кстати:
Using Author Template Tags Outside of the WordPress Loop

уважаемый Ю.Б., а если я сделал в другом шаблоне по вашей полной инструкции и у меня не заработало – в чем может быть проблема?

Мы же вас предупреждали: "Так что код шаблонозависимый, можно сказать." 🙂
Извините, Бог телепатией не наградил, так что причину Вам придется искать самостоятельно. Советую обратить внимание на порядок вызовов, может использование переменной идет до ее определения.

да, поменял некоторым образом расположение этого блока (с левого сайдбара в правый) и получилось. правда пришлось использовать старый код. спасибо!

Anonymous
Отправить
Ответ на: