В связи с кучей ограничений самого AMP и тем, что плагин amp-wp (от Automattic) находится на стадии разработки, товарищи забыли или не успели добавить функцию вывода миниатюры поста. Это исправляется в два счёта.
Вариант 1
Покопавшись в недрах плагина, я нашел фильтр amp_post_template_data
, за который можно зацепиться для изменения контента AMP-страницы.
/** * Добавить обложку к посту в AMP-версии * * @param array $data все данные по текущей странице . * @param array $post информация по посту. * * @return mixed */ function mihdan_amp_featured_image( $data, $post ) { // Проверить, есть ли у поста миниатюра if ( has_post_thumbnail( $post ) ) { $size = 'medium'; // Получить идентификатор вложения $thumbnail_id = get_post_thumbnail_id( $post ); // Получить вариации srcset $srcset = wp_get_attachment_image_srcset( $thumbnail_id, $size ); // Получить путь и размеры миниатюры list ( $src, $width, $height ) = wp_get_attachment_image_src( $thumbnail_id, $size ); // Собрать все в тег amp-image $featured_image = sprintf( '<p><amp-img id=»featured-image» layout=»responsive» src=»%s» width=»%d» height=»%d» alt=»%s» srcset=»%s»></amp-img></p>', esc_url( $src ), absint( $width ), absint( $height ), esc_attr( $post->post_title ), esc_attr( $srcset ) ); // Добавить тег в начало поста $data['post_amp_content'] = $featured_image . $data['post_amp_content']; } return $data; } add_filter( 'amp_post_template_data', 'mihdan_amp_featured_image', 10, 2 );
Данную функцию можно разместить в файле function.php
или завернуть в плагин.
У себя я ее положил в папку с mu-плагинами (/wp-content/mu-plugins/amp.php
), чтобы она корректно работала вместе с плагином WPtouch, который подменяет шаблон на мобильных устройствах, из-за чего код в functions.php
просто перестает работать.
Есть вопросы? Пишите в комментах.
Вариант 2
Этот способ базируется на внедрении миниатюры в начало контента поста при помощи обычного тега <img />
до рендера AMP-парсера через хук pre_amp_render_post
. В процессе рендеринга страницы тег <img />
преобраузется в валидный <amp-img />
.
/** * Добавляем свой хук в рендер AMP поста */ function mihdan_amp_add_custom_actions() { add_filter( 'the_content', 'mihdan_amp_add_featured_image' ); } add_action( 'pre_amp_render_post', 'mihdan_amp_add_custom_actions' ); /** * Добавляем миниатюру в начало поста в виде тега <img /> * Впоследствии он заменится парсером на <amp-img /> * * @param string $content текст поста * * @return string */ function mihdan_amp_add_featured_image( $content ) { if ( has_post_thumbnail() ) { $image = sprintf( '<p class=»featured-image»>%s</p>', get_the_post_thumbnail() ); $content = $image . $content; } return $content; }
Источник: https://www.kobzarev.com/wordpress/add-amp-featured-image-wordpress/