Ответ
Вадим Кот полностью подходит, если надо в конкретном месте шаблона разово запилить. Но если это должно быть как стандартное поведение везде, где есть post thumbnails, а сторонний плагин ставить не хочется, то лучше написать свою функцию. У меня она среди прочих полезных лежит в mu-plugin'е, но можно и в
functions.php:
/**
* Display native post thumbnail or a fallback image.
*
* @param string $size
* @param string $attr
*/
function the_post_thumbnail_fallback( $size = 'post-thumbnail', $attr = '' )
{
if ( has_post_thumbnail() ) :
echo get_the_post_thumbnail( null, $size, $attr );
else :
$post_thumbnail_id = get_option( 'default_post_thumbnail' );
$html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr );
/**
* Filters the post thumbnail HTML.
*
* @param string $html The post thumbnail HTML.
* @param int $post_id The post ID.
* @param string $post_thumbnail_id The post thumbnail ID.
* @param string|array $size The post thumbnail size. Image size or array of width and height values (in that order). Default 'post-thumbnail'.
* @param string $attr Query string of attributes.
* @since 2.9.0
*/
echo apply_filters( 'post_thumbnail_html', $html, null, $post_thumbnail_id, $size, $attr );
endif;
}
В шаблонах просто используем эту функцию вместо
the_post_thumbnail(), включая необходимые параметры (размер и тд):
<header class="post-header">
<h1 class="post-title">
<?php the_title(); ?>
</h1>
<div class="post-thumbnail">
<?php the_post_thumbnail_fallback(); ?>
</div>
</header>
В самой функции
the_post_thumbnail_fallback() обратите внимание на строчку
$post_thumbnail_id = get_option( 'default_post_thumbnail' );
Сама картинка загружена через медиабиблиотеку, ее ID хранится в
wp_options. У меня это реализовано в настройках (как и в плагине, на который ссылается
Вадим Кот), но можно захардкодить ID прямо в этой функции. HTML создается нативной
wp_get_attachment_image(), идентично тому что создаст
the_post_thumbnail() потому что она использует эту же функцию.
Также здесь у нас сохранен фильтр
post_thumbnail_html, с помощью которого сторонние плагины могут модифицировать html-код тега
img - а это могут быть вполне полезные фичи - SEO, css-классы (например для lazyload), responsive и тд.