0

Can I do this for posts?

I have the most recents posts I am fetching and I am showing the thumbnail (the featured image) of these posts IF they exist.

What I want to do now, is to show category images IF the featured image does not exist.

Can someone help me with this?

I have this, at the moment:

    <?php 

    $args = array( 'numberposts' => '5' );
    $recent_posts = wp_get_recent_posts($args);
    $category = get_the_category(); 
    foreach( $recent_posts as $recent ){
        if($recent['post_status']=="publish"){
        if ( has_post_thumbnail($recent["ID"])) {
            echo '<a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' .   get_the_post_thumbnail($recent["ID"], 'thumbnail').'<div class="browse_category_name"> ' . $recent["post_title"]. '<div> ' . get_the_author_meta('display_name', $recent["post_author"]). '</div></div></a></li> ';
        } else{
            echo '<a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' .  get_categories_with_images($post->ID,' ,') . $recent["post_title"].'</a></li> ';
        }
         }
    }
    ?>

And this is my functions.php:

function get_categories_with_images($post_id,$separator ){

    //first get all categories of that post
    $post_categories = wp_get_post_categories( $post_id );
    $cats = array();

    foreach($post_categories as $c){
        $cat = get_category( $c );
        $cat_data = get_option("category_$c");

        //and then i just display my category image if it exists
        $cat_image = '';
        if (isset($cat_data['img'])){
            $cat_image = '<img src="'.$cat_data['img'].'">';
        }
        $cats[] =  $cat_image . '<a href="'.get_category_link( $c ) . '">' .$cat->name .'</a>';
    }
    return implode($separator , $cats);
}

Problem: category image is not shown, even though thumbnail / featured image is not set.

2 Answers 2

0

You have a typo. In your loop you're checking has_post_thumbnail($recent["ID"]), but $recent['ID'] won't be set because the variable for each post in your foreach is $decent:

foreach( $recent as $decent ){
1
  • Thanks, Jacob. Fixed that error, yet still not working. I can't see category images at the moment.
    – Siyah
    Sep 19, 2017 at 9:32
0

Change your code to :

<?php 

$args = array( 'numberposts' => '5' );
$recent = wp_get_recent_posts($args);
$category = get_the_category(); 
foreach( $recent as $decent ){
    if($decent['post_status']=="publish"){
    if ( has_post_thumbnail($decent["ID"])) {
        echo '<a href="' . get_permalink($decent["ID"]) . '" title="Look '.esc_attr($decent["post_title"]).'" >' .   get_the_post_thumbnail($decent["ID"], 'thumbnail').'<div class="browse_category_name"> ' . $decent["post_title"]. '<div> ' . get_the_author_meta('display_name', $decent["post_author"]). '</div></div></a></li> ';
    } else{
        echo '<a href="' . get_permalink($decent["ID"]) . '" title="Look '.esc_attr($decent["post_title"]).'" >' .  get_categories_with_images($post->ID,' ,') . $decent["post_title"].'</a></li> ';
    }
     }
}
?>

The post is now $decent, not $recent

8
  • Did that. Doesn't work! I can see the posts, but not the category images!
    – Siyah
    Sep 19, 2017 at 9:33
  • In your functions.php, when you var_dump($cats), do you get the array of desired result?
    – Annapurna
    Sep 19, 2017 at 9:37
  • I only get the category name, at the moment. I don't get the image. I don't know what I am doing wrong.
    – Siyah
    Sep 19, 2017 at 9:39
  • please check if "category_$c" exists
    – Annapurna
    Sep 19, 2017 at 9:43
  • Yes. The image does exist...
    – Siyah
    Sep 19, 2017 at 10:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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