0

I have the following code and want to add a selected featured image

    $arg = array(
       'orderby'    => 'date',
       'number'     => 10,
    );
    $categories = get_categories($arg);
    foreach ($categories as $cat) {
         echo '<li>';
         echo '<figure>
                <a href="?catId='.$cat->cat_ID.'">';
                   //Add featured image from the last post??
                    get_last_post_image($cat->name);
        echo '</a>
             </figure>';
         </li>';
      } 

And I have this function:

function get_last_post_image($cat_name){
    $args = array(
        'category_name' => '$cat_name',
        'posts_per_page' => 1,
        'order_by' => 'date',
        'order' => 'desc'
    );
    $post = get_posts( $args );
    if($post) {
        $post_id = $post[0]->ID;
        if(has_post_thumbnail($post_id)){
            echo get_the_post_thumbnail($page->ID, 'thumbnail');
        }
    }
}

But the featured image is never displayed.

  • 1
    "Title Background Image" is not a field created by WordPress Core - it's being added through either a plugin or your theme. You'll want to search through them to find out what plugin or theme is adding it, and then you can use their support channels or browse through their code to find out how they are saving it and how to retrieve it. :) – WebElaine Mar 25 at 15:49
  • Thanks, I edited my question consequently... – supershivas Mar 25 at 16:27
0

Correct this line in your code at the end of function.

echo get_the_post_thumbnail($page->ID, 'thumbnail');

should be

echo get_the_post_thumbnail($post_id, 'thumbnail');

also as per Wordpress documentation, category_name parameter should be a string representing category slug, not name.

So, the complete code should look like this:

    $arg = array(
       'orderby'    => 'date',
       'number'     => 10,
    );
    $categories = get_categories($arg);
    echo '<ul>';

    foreach ($categories as $cat) {
         echo '<li>';
         echo '<figure>
                <a href="?catId='.$cat->term_id.'">'; // not cat_ID
                   //Add featured image from the last post??
                    get_last_post_image($cat->slug);
        echo '</a>
             </figure>
         </li>';
      } 
    echo '</ul>';

And the function:

function get_last_post_image($cat_slug){
    $args = array(
        'category_name' => $cat_slug, // it should be slug of category, not name.
        'posts_per_page' => 1,
        'order_by' => 'date',
        'order' => 'desc'
    );
    $post = get_posts( $args );
    if($post) {
        $post_id = $post[0]->ID;
        if(has_post_thumbnail($post_id)){
            echo get_the_post_thumbnail($post_id, 'thumbnail');
        }
    }
}
  • I still have a problem with if($post){...}as if($post) { ...}else{echo "Error";} gives "Error" – supershivas Mar 25 at 17:00
  • Because no posts are returned by get_post(). As per Wordpress, category_name parameter should be a string representing category slug, not name. I have updated the answer. – Qaisar Feroz Mar 25 at 17:31
  • thanks, it works but it only displays the last post thumbnail (and not last post per category). – supershivas Mar 25 at 18:03
  • You mean same image (thumbnail of latest blog post) is repeated for each category? – Qaisar Feroz Mar 25 at 18:18
  • Yes, last post thumbnail is repeated no matter which category it is. imgur.com/Nax8REu – supershivas Mar 25 at 18:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.