get_avatar() возвращает число

Вопрос или проблема

Я пишу author.php и использую get_avatar() внутри оператора if в The Loop, но всё, что я получаю, это число. Думаю, это ID пользователя.

Вот мой код:

<?php if ( have_posts() ) : the_post(); ?>
    <div class="contributor-card">
    <?php esc_html( get_avatar( the_author_meta( 'ID' ), 96 ) ); ?>
        <h1><?php esc_html( the_author_meta( 'display_name' ) ); ?></h1>
        <p><?php esc_html( the_author_meta( 'description' ) ); ?></p>
        <a class="button" href="<?php esc_url( the_author_meta( 'user_url' ) ) ?>">Website &#8250;</a>
    </div>
<?php rewind_posts(); while ( have_posts() ) : the_post();

Я уже пробовал присвоить ID автора переменной, но это все равно даёт мне число:

<div class="contributor-card">
<?php $author_id = the_author_meta( 'ID' ); ?>
<?php esc_html( get_avatar( $author_id, 96 ) ); ?>
    <h1><?php esc_html( the_author_meta( 'display_name' ) ); ?></h1>
    <p><?php esc_html( the_author_meta( 'description' ) ); ?></p>
    <a class="button" href="<?php esc_url( the_author_meta( 'user_url' ) ) ?>">Website &#8250;</a>
</div>

Ваш код в основном будет выдавать ошибки, например, отсутствие ; в конце

этот код, например

<?php esc_url( the_author_meta( 'user_url' ) ) ?>

правильный код должен быть

<?php echo esc_url( get_the_author_meta( 'user_url' ) ); ?>

или

<?php the_author_meta( 'user_url' ); ?>

Почему появляется номер ID автора?

Число, которое появляется, выше, это номер ID пользователя, почему оно появляется? Потому что оно используется в строке ($):

<?php $author_id = the_author_meta( 'ID' ); ?>

Если вы хотите определить ID автора в строке ($), то используйте get_, например, вот так:

<?php $author_id = get_the_author_meta( 'ID' ); ?>

Обратите внимание, что приведенный выше код только генерирует номер ID пользователя.

нет вывода для вызова функции аватара

<?php $author_id = the_author_meta( 'ID' ); ?>
<?php esc_html( get_avatar( $author_id, 96 ) ); ?>

код для вызова функции аватара должен быть

<?php $author_id = get_the_author_meta( 'ID' ); ?>
<?php echo get_avatar( $author_id, 96 ); ?>

Это сделает аватар видимым.

esc_html() используется только в определенных кодах, например, строках, полученных от параметров, введенных пользователями

В вашем случае вызов аватара не требует использования esc_html()

Функции WordPress с префиксом get_ или напрямую префикс the_, чтобы вызвать функцию get_, нужно использовать echo, в то время как the_ обычно без echo, поэтому, когда вы помещаете the_author_meta(‘ID); в строку, она будет немедленно выполнена.

пример get_

<a class="button" href="<?php echo esc_url( get_the_author_meta( 'user_url' ) ); ?>">Website &#8250;</a>

пример the_

<a class="button" href="<?php the_author_meta( 'user_url' ); ?>">Website &#8250;</a>

Результат кода

<div class="contributor-card">
<?php echo get_avatar( get_the_author_meta( 'ID' ), 96 ); ?>
    <h1><?php esc_html( the_author_meta( 'display_name' ) ); ?></h1>
    <p><?php esc_html( the_author_meta( 'description' ) ); ?></p>
    <a class="button" href="<?php echo esc_url( get_the_author_meta( 'user_url' ) ) ?>">Website &#8250;</a>
</div>

или если вы хотите использовать ID автора для конкретной цели

<?php $author_id = get_the_author_meta( 'ID' ); ?>
<?php esc_html( get_avatar( $author_id, 96 ) ); ?>
    <h1><?php esc_html( the_author_meta( 'display_name' ) ); ?></h1>
    <p><?php esc_html( the_author_meta( 'description' ) ); ?></p>
    <a class="button" href="<?php echo esc_url( get_the_author_meta( 'user_url' ) ); ?>">Website &#8250;</a>
</div>

Вы вызываете esc_html() в нескольких местах в вашем коде, но вы не делаете ничего с возвращаемым значением esc_html().

esc_html() ничего не выводит на экран; вам нужно сделать, например, echo esc_html( $some_value ); для этого. Однако, я также не думаю, что вам нужно использовать esc_html() в данном случае, потому что esc_html() изменит <img alt="[alt]" src="https://wordpress.stackexchange.com/questions/428156/[avatar URL]"> на &lt;img alt="[alt]" src="https://wordpress.stackexchange.com/questions/428156/[avatar URL]"&gt;.

Напротив, the_author_meta() делает вывод на экран, из-за чего, возможно, вы видите число в неожиданном месте. Используйте get_the_author_meta() для получения, но не вывода данных.

Что-то вроде этого:

<?php if ( have_posts() ) : the_post(); ?>
    <div class="contributor-card">
    <?php echo get_avatar( get_the_author_meta( 'ID' ), 96 ); ?>
        <h1><?php the_author_meta( 'display_name' ); ?></h1>
        <p><?php the_author_meta( 'description' ); ?></p>
        <a class="button" href="<?php the_author_meta( 'user_url' ); ?>">Website &#8250;</a>
    </div>
<?php rewind_posts(); while ( have_posts() ) : the_post();

…это, вероятно, то, что вы ищете.

.

Ответ или решение

При разработке веб-приложений на WordPress иногда возникают проблемы, которые на первый взгляд кажутся загадочными, но на самом деле имеют простое объяснение и решение. Рассмотрим ситуацию, когда функция get_avatar() возвращает вместо ожидаемого HTML-кода изображения аватара просто число, и разберем, как можно исправить эту проблему.

Теория

В первую очередь, необходимо понять, как работают функции WordPress, такие как the_author_meta() и get_the_author_meta(). Эти функции предназначены для работы с метаданными автора. Важно различать их функциональность:

  1. the_author_meta() — выводит значение метаданных автора непосредственно на экран. Это значит, что при вызове the_author_meta( 'ID' ) это значение будет немедленно отображено на странице.

  2. get_the_author_meta() — извлекает значение метаданных и возвращает его, но не выводит непосредственно на экран. Это позволяет использовать значение для дальнейшей обработки или вывода, такими, например, функциями как echo.

Пример

Теперь давайте применим наш теоретический анализ. В приведенном вами коде проблема заключалась в том, что:

<?php esc_html( get_avatar( the_author_meta( 'ID' ), 96 ) ); ?>

Здесь the_author_meta( 'ID' ) сразу выводит ID пользователя на страницу, так как вы используете эту функцию внутри вызова get_avatar(). Вместо этого вы должны использовать get_the_author_meta( 'ID' ), чтобы просто получить ID без его немедленного вывода.

Применение

Вот как правильно использовать функции для получения аватара, отображения имени, описания и URL сайта автора:

<?php if ( have_posts() ) : the_post(); ?>
    <div class="contributor-card">
        <?php 
            // Получаем ID автора без вывода на экран
            $author_id = get_the_author_meta( 'ID' );

            // Корректное использование get_avatar для генерации HTML-изображения
            echo get_avatar( $author_id, 96 ); 
        ?>
        <h1><?php echo esc_html( get_the_author_meta( 'display_name' ) ); ?></h1>
        <p><?php echo esc_html( get_the_author_meta( 'description' ) ); ?></p>
        <a class="button" href="<?php echo esc_url( get_the_author_meta( 'user_url' ) ); ?>">Website &rsaquo;</a>
    </div>
<?php rewind_posts(); while ( have_posts() ) : the_post(); ?>

Разъяснение

В данном коде мы:

  • Используем get_the_author_meta() вместо the_author_meta(): Это позволяет извлечь значение без немедленного вывода. Такое изменение коррелирует с безопасным и правильным использованием данных.

  • Используем echo вместе с esc_html() и esc_url() для безопасного вывода данных: Эти функции защищают ваш сайт от потенциально опасных данных, введенных пользователем, и гарантируют, что они будут правильно экранированы.

Почему это важно

Правильное использование функций get_the_author_meta() и the_author_meta() не только обеспечивает корректность отображения вашего сайта, но и играет важную роль в безопасности. WordPress предоставляет мощные инструменты для манипуляции и вывода данных, и грамотное их использование критично для разработки профессиональных веб-приложений.

Таким образом, если вы заметили, что функция get_avatar() возвращает неожиданный результат, важно проанализировать используемые вами функции на предмет их функциональности: выводят они данные на экран или возвращают для дальнейшего использования. Этот простой, но мощный анализ позволяет решать многие аналогичные проблемы и развивать более глубокое понимание принципов работы WordPress.

Такой подход позволяет не только успешно решать проблемы, но и вести более безопасную и качественную разработку с использованием WordPress.

Оцените материал
Добавить комментарий

Капча загружается...