Поддержка Проблемы и решения Аватар автора как миниатюра поста

  • То ли лыжи, то ли мороз, но никак не соображу как присвоить аватар автора поста как миниатюру этого поста.

    При публикации/апдейте ну и старым постам тоже надо бы присвоить.
    Как/чем это можно сделать?

    Аватар локальный, если что.

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • *напевает* Ой, мороз, мороз… 🙂

    Не проще ли в шаблоне заменить вывод миниатюры на вывод аватара автора?

    Не проще ли в шаблоне заменить вывод миниатюры на вывод аватара автора?

    Оно с одной стороны проще (технически), но тут фишка такая, что миниатюра может использоваться в разных местах (портальная морда с кучей разных блоков и слайдером постов напр.) и в плагинах (ну хотя бы типа похожие записи).
    И хочется по уму сделать. Логичней же присвоить миниатюру посту. Но доверять делать это авторами никак низзя ;).

    Логичней же присвоить миниатюру посту.

    Да, но в таком случае что будет, если юзер сменит аватар? Теоретически может быть ситуация, когда у каждого поста юзера будет свой аватар, а это значит, что миниатюра-аватар как визуальный маркер автора (привычная для форумов функция аватара) работать уже не будет. Значит — подстановка на выводе?

    Да, но в таком случае что будет, если юзер сменит аватар?

    Хм. да, теоретически тут могут возникнуть проблемы.
    В идеале конечно лучше бы тогда сразу и на это событие повесить обновление миниатюры «своих» постов.
    Хотя в данном случае это не особо важно. Это достаточно редкое событие (раз в неск лет может и случится). И без ведома админа юзер не сменит аву. Точнее админ буде оповещён об этом. И тогда он (админ) сможет перегенерировать миниатюры.
    Да и по большому счёту не особо критично, если в старых постах будут использоваться старые миниатюры-аватары.

    Значит — подстановка на выводе?

    Вывести в теме аву вместо тумбы конечно же проще, но вот как быть с кучкой плагинов? Переписывать? Откровенно говоря тут нет ни желания ни бюджета ни целесообразности (обновления ж).

    Мне всё же кажется, что лучше в ручном режиме («по кнопке») или как вариант по крону обновить/добавить миниатюры автора(ов).

    Зачем «по кнопке»? Можно повесить обработчик на хук ‘transition_post_status’ и по условию if ('publish' == $new_status) (говорят, это надежней, чем просто на ‘publish_post’) запускать процедуру привязки миниатюры. Если речь только о локальных аватарах и если они хранятся в медиатеке как и прочие картинки, то достаточно просто присвоить постмета _thumbnail_id. Если нет, то придется делать еще и загрузку картинки в медиатеку.

    Можно повесить обработчик на хук ‘transition_post_status’

    Вот тут у меня пробелы :(. Ну т.е. читая чужой код я вроде понимаю как и для чего там хуки, с «популярными» тоже особых проблем нет, но вот как узнать нужные (не популярные) и как правильно использовать — тут я плаваю. 🙁
    Сособно, наверное потому и прошу помощи.

    то достаточно просто присвоить постмета _thumbnail_id

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

    Если нет, то придется делать еще и загрузку картинки в медиатеку.

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

    как получить аву автора

    Увы, тут я сильно помочь не могу, ибо не знаю, как и чем формируете локальные аватары.

    Будем считать, что они уже есть в медиатеке. Ну т.е. предварительно будут загружаться в редакторе профиля юзера.

    Если эта часть подконтрольна Вам, то загружая в медиатеку, сразу формируйте для этого юзера user_meta с id картинки. Тогда при публикации поста сможете легко получить id картинки по id автора и затолкать в post_meta _thumbnail_id поста.

    Как-то так

    add_action( 'publish_post', 'my_add_post_thumb', 10, 2 );
    function my_add_post_thumb($post_id, $post) {
      $thumb_id = get_user_meta( $post->post_author, '_avatar_id', true );
      update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
    }

    ибо не знаю, как и чем формируете локальные аватары.

    Ава хранится в _usermeta в meta_key аля
    user_avatar -> 288
    (288=ID медиафайла).

    Я тут поэкспериментировал и.. ещё больше запутался с эти авами. У меня появилось ощущение, что ВП реагирует на название поля (в _usermeta) с вхождениями «ava», «picher» и тп. Потому что куда бы и как бы не вписал аву — она в большинстве случаев распознаются и показывается в таблице юзеров и понимается get_avatar_data и производными функциями.

    Как-то так

    О, спс. Кацца то, что нужно.

    Вместо update_post_meta использовал set_post_thumbnail

    Спасибо ещё раз.

    Ксати, попался интересный плагинчик https://wordpress.org/plugins/add-actions-and-filters/. Для быстрых экспериментов весьма приятно.

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Аватар автора как миниатюра поста» закрыта для новых ответов.