Как использовать аватар автора как Facebook после просмотра изображения, когда один пост является общим

Я хочу использовать аватар автора сообщения, если он доступен в качестве изображения предварительного просмотра для общих постов Facebook. Если это не доступно в следующий раз, будет отображаемое изображение, а затем изображение по умолчанию в качестве резервной копии. Есть ли плагин или функция, которая может это сделать?

Плагин Yoast SEO и многие другие могут вставлять изображение по умолчанию, но я не смог найти тот, который может вытащить изображение из аватара автора.

* Заметьте, я также использую Simple Local Avatars для пользователей, у которых нет аватаров, связанных с их электронной почтой

Solutions Collecting From Web of "Как использовать аватар автора как Facebook после просмотра изображения, когда один пост является общим"

Из ваших комментариев кажется, что вы хотите заменить предварительный просмотр на facebook. Это может быть сложно, потому что вы пытаетесь изменить поведение другой веб-страницы. С протоколом opengraph это можно сделать.

add_action( 'wp_head', 'get_facebook_meta_tags', 10, 0 ); function get_facebook_meta_tags() { global $post; // bail if the post is not in single view if ( ! is_single() ) return; // get the url from post authors avatar (if available) or the url of post thumbnail // bails if no image was found $img_url = set_facebook_preview_image(); if ( empty( $img_url) ) return; // set description. use the first 97 chars from post excerpt (if available) or post content (alternativly) // add '...' to description $description = ( ! empty( $post->post_excerpt ) ) ? $post->post_excerpt : $post->post_content; if ( strlen( $description ) > 100 ) $description = substr( $description, 0, 97 ) . '...'; // create meta tags $format = ' <meta property="og:title" content="%s" /> <meta property="og:type" content="article" /> <meta property="og:url" content="%s" /> <meta property="og:image" content="%s" /> <meta property="og:site_name" content="%s"/> <meta property="og:description" content="%s" />'; printf( $format, esc_attr( $post->post_title ), esc_attr( get_permalink( $post->ID ) ), esc_attr( $img_url ), esc_attr( get_bloginfo( 'name', 'raw') ), esc_attr( $description ) ); } function set_facebook_preview_image() { global $post; if ( ! is_object( $post ) || empty( $post ) ) return false; // get the autor id and url from authors avatar (if available) // add a filter on get_avatar. this filter returns an empty string if a default avatar is returned add_filter( 'get_avatar', 'no_avatar_for_fb_preview_image', 0, 5 ); $author_id = isset( $post->post_author ) ? $post->post_author : ''; if ( empty( $author_id) ) return false; $author_avatar_html = get_avatar( $author_id ); // do not forget to remove the filter!! remove_filter( 'get_avatar', 'no_avatar_for_fb_preview_image', 0, 5 ); // grab avatar url from avatar html string if ( ! empty( $author_avatar_html ) ) { preg_match( '#(?<=src\=["|\']).+(?=["|\'](\s|\/\>))#Uuis', $author_avatar_html, $url ); $author_avatar_url = ( isset( $url[0] ) && ! empty( $url[0] ) ) ? $url[0] : ''; } // get the url fromj post thumbnail $post_thumb_url = wp_get_attachment_url( get_post_thumbnail_id( $post->ID ) ); // set url to author avatar url with fallback to post thumbnail url $img_url = ''; if ( ! empty( $author_avatar_url ) ) $img_url = $author_avatar_url; if ( empty( $img_url ) && ! empty( $post_thumb_url ) ) $img_url = $post_thumb_url; return $img_url; } function no_avatar_for_fb_preview_image( $avatar, $id_or_email, $size, $default, $alt ) { if ( ! empty( $default ) ) return ''; } 

Первая функция перехватывает wp_head и проверяет, является ли страница единственным видом. Если это так, он пытается получить URL-адрес изображения (эскиз сообщения или URL-адрес аватара автора). Если он может получить URL-адрес, он отобразит необходимые метатеги.
Вторая функция захватывает URL-адрес аватара и отправляет эскиз. Он использует фильтр для случая, когда у пользователя нет аватара. В этом случае он возвращает пустую строку, и URL-адрес эскиза сообщения будет возвращен.

Эта функция извлекает автора из ссылки на facebook и получает URL-адрес авторам facebook avatar

 function get_fb_avatarurl_from_fb_post( $fb_post_link ) { $avatar_template = 'http://graph.facebook.com/%username%/picture'; $user = ''; $avatar_url = false; $parsed_url = parse_url( $fb_post_link ); if ( isset( $parsed_url['path'] ) ) { $path = trim( $parsed_url['path'], '/' ); preg_match( '#^.+/#Uuis', $path, $user ); if ( ! empty( $user ) && isset( $user[0] ) ) $avatar_url = str_replace( '%username%', trim( $user[0], '/' ), $avatar_template ); } return $avatar_url; } 

Функция ожидает ссылку в формате https://www.facebook.com/the.facebook.post.author/posts/123456789123456

Чтобы отобразить аватар facebook или миниатюру сообщения, вы можете использовать этот фрагмент кода

 global $post; $avatar_img_url = get_fb_avatarurl_from_fb_post( [the facebook post url] ); $post_img_html = get_the_post_thumbnail( $post->ID, 'thumbnail' ); if ( empty( $post_img_html ) ) $post_img_html = '<img src="" />'; // modify the html to whatever you want if ( ! empty( $avatar_img_url ) ) $post_img_html = preg_replace( '#(?<=src\=["|\']).+(?=["|\'](\s|\/\>))#Uuis', $avatar_img_url, $post_img_html ); echo $post_img_html; 

Я не знаю, откуда вы получили ссылку на facebook, но я думаю, что вы уже получили ее в любом месте. Фрагмент кода сначала попытается получить URL-адрес аватара fb. Затем он попытается получить миниатюру сообщения. get_the_post_thumbnail() дает вам полный код html, например <img width="150" height="150" src="[some url]" class="attachment-thumbnail wp-post-image" alt="Uploaded image your title here" /> .
Если миниатюры сообщений не доступны, используется шаблон html (вы должны отредактировать его). Если имеется миниатюра сообщения и URL-адрес аватара fb, источник изображения заменяется URL-адресом аватара fb. Если имеется миниатюра сообщения, но нет URL-адреса аватара fb, отображается миниатюра сообщения.

Если вы хотите также изменить атрибут alt , вы можете расширить if -statement

 if ( empty( $post_img_html ) ) $post_img_html = '<img src="" alt="" />'; if ( ! empty( $avatar_img_url ) ) { $fb_alt_attrb = 'The new text for alt attrb if a fb avatar is displayed'; $post_img_html = preg_replace( '#(?<=src\=["|\']).+(?=["|\'](\s|\/\>))#Uuis', $avatar_img_url, $post_img_html ); $post_img_html = preg_replace( '#(?<=alt\=["|\']).+(?=["|\'](\s|\/\>))#Uuis', $fb_alt_attrb, $post_img_html ); } 

Надеюсь, это поможет вам.

Редактировать Это изменит изображение миниатюры / изображения с изображением facebook.