Установка миниатюры для архивных шаблонов
Я хочу установить изображение записи для архивных шаблонов моей темы. Насколько я знаю, в админке WordPress нет возможности сделать это напрямую (как для страниц и записей).
Я думал о написании функции, которая будет фильтровать загруженные изображения записи и сопоставлять шаблон с именем файла. Но это может быть несколько сложно.
Также я знаю, что есть настройки темы. Но это кажется слишком громоздким для управления.
Как бы вы порекомендовали реализовать это, чтобы облегчить администрирование изображений записи (Тема → Заголовок) и упростить поддержку...

В WordPress существует множество архивов. Архивы меток, архивов по датам, архивов категорий, архивов терминов, архивов авторов. Какой именно архив вы имеете в виду?
Вы можете начать с попытки использовать плагин Taxonomy Images http://wordpress.org/extend/plugins/taxonomy-images/

Это устарело, но это первый результат, который появляется в Google по данной теме.
Способ, который я нашел для решения этой проблемы — создать новую страницу. Не давайте ей то же имя, что и у страницы архива (WordPress не любит страницы с именами, совпадающими с архивными, это вызывает проблемы), вы можете назвать ее как угодно иначе. Установите изображение записи, а затем вызовите его в шаблоне архива с помощью этого кода:
$post_id = 8;
$queried_post = get_post($post_id);
$src = wp_get_attachment_image_src(get_post_thumbnail_id($queried_post->ID), '') ;
$thumb_id = get_post_thumbnail_id($post_id);
?>
<img src="<?php echo $src[0]; ?>" class="img-responsive" alt="Изображение записи" title="Изображение записи" />
Разберем по частям:
$post_id = 8;
это ID вашей новой страницы.
$src = wp_get_attachment_image_src(get_post_thumbnail_id($queried_post->ID), '') ;
находит изображение записи, прикрепленное к этой странице.
<img src="<?php echo $src[0]; ?>" class="img-responsive" alt="Изображение записи" title="Изображение записи" />
выводит изображение записи с вашей новой страницы.

вы можете сделать это через css, определив область изображения заголовка в вашем archive.php и установив фоновое изображение в style.css
или вы можете использовать плагин Dynamic Headers http://wordpress.org/extend/plugins/dynamic-headers/ (работает отлично, несмотря на то, что не обновлялся с 2010 года)

Отвечаю с опозданием, но, кажется, этот плагин решает исходный вопрос: http://wordpress.org/plugins/categories-images/
Он позволяет администратору выбрать «избранное изображение» для конкретной категории, метки или таксономии в панели редактирования таксономии. Затем его можно использовать в архивах темы (например, в archive.php), выводя z_taxonomy_image_url();
.
Если вы предпочитаете написать собственное решение, возможно, стоит изучить код этого плагина для вдохновения.

Я думаю, вам стоит использовать ручной метод, примерно такой:
- зайдите на страницу "РЕДАКТИРОВАНИЕ" каждой категории и в описании разместите следующее:
[image url="https://upload.wikimedia.org/wikipedia/commons/0/0c/Bunker_in_Albanian_Alps.jpg"]
- получите изображение для категории:
if (is_archive()) {
if (!empty($GLOBALS['wp_query']->queried_object->description) ) {
$cat_description =$GLOBALS['wp_query']->queried_object->description);
//примечание: с других страниц вы можете получить описание категории через: get_term('1533' , 'category')->description;
preg_match('/url\=\"(.*?)\"/si', $cat_description, $new);
if(!empty($new[1])) {
$found_image= $new[1];
}
}
}
теперь вы можете использовать это изображение где угодно, в head
или на странице...

YOAST! Premium делает это из коробки.
Однако я использую ACF, где могу создать страницу настроек, на которой добавил повторяющееся поле, где могу установить изображение для записи для каждого типа поста.
Затем, с помощью функции ниже, добавленной в мой functions.php, я вызываю необходимые метатеги в архивах типов записей, для которых определил изображение записи.
function custom_featured_archive_image() {
$o = get_field("featured_images", "option");
if (is_array($o)) {
foreach($o as $option) {
if (is_post_type_archive($option["post_type"])) {
$image_id = $option["image"];
$image_url = wp_get_attachment_image_src($image_id, "original");
$mime_type = get_post_mime_type($image_id);
echo '
<meta property="og:image" content="'.$image_url[0].'">
<meta property="og:image:width" content="'.$image_url[1].'">
<meta property="og:image:height" content="'.$image_url[2].'">
<meta property="og:image:type" content="'.$mime_type.'">
<meta name="twitter:image" content="'.$image_url[0].'">
';
}
}
}
}
add_action('wp_head', 'custom_featured_archive_image', 0);
