Set Featured Image for Archive templates

I’m want to set a featured image for the archive templates of my theme. To my knowledge, there is not a way to do so in the WordPress Admin (like Pages and Posts).

I was thinking about writing a function that filters through the currently uploaded featured images and matches the template to the file name. Might be a bit complex.

Read More

I also know there are theme options. But this seems like a lot to manage.

How would you recommend doing this that facilitates Featured Image administration (Theme -> Header) and ease of maintenance…

Related posts

Leave a Reply

6 comments

  1. This is old, but it’s the first search that comes up on Google under this topic.

    The way I found round this was to create a new page. Don’t give it the same name as your archive page (WordPress doesn’t like pages with the same name as your archive page it causes problems), you can call it anything else. Set the featured image and then call it on your archive template using this code:

    $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" />
    

    To break it down:

    $post_id = 8;
    

    is the id number of your new page.

    $src = wp_get_attachment_image_src(get_post_thumbnail_id($queried_post->ID), '') ; 
    

    finds the featured image attached to this page

    <img src="<?php echo $src[0]; ?>" class="img-responsive" /> 
    

    echos out the featured image from your new page.

  2. Coming in quite late on this, but I believe this plugin addresses the original question:
    http://wordpress.org/plugins/categories-images/

    It allows an admin to select a ‘featured image’ for a particular category / tag / taxonomy on the taxonomy edit panel. Then it can be used in a theme’s archive.php (for example) by echoing z_taxonomy_image_url();.

    If you’d rather roll your own, maybe check out the code in that plugin for a starting point.

  3. I think you should go with Manual method, something like this:

    1. enter each category “EDIT” page, and in the description, place like this:
        [image url="https://upload.wikimedia.org/wikipedia/commons/0/0c/Bunker_in_Albanian_Alps.jpg"]
    
    1. get image for category:
        if (is_archive())   {
            if (!empty($GLOBALS['wp_query']->queried_object->description) )  { 
                $cat_description =$GLOBALS['wp_query']->queried_object->description); 
                    //p.s. from other pages, you can get category description by:  get_term('1533' , 'category')->description;  
                preg_match('/url="(.*?)"/si', $cat_description, $new);
                if(!empty($new[1])) {
                    $found_image= $new[1];
                }
            }
        }
    

    now, you can use that image anywhere, in head or in page…

  4. YOAST! Premium does this out-of-the-box.

    However, I use ACF, where I can create an options page, where I added a repeater field where I can set a featured image for each post type.

    Then, with the function below added to my functions.php, I call the necessary meta tags on the post type archives for which I defined a featured image.

    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);