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.

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 '17 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 '17 at 9:33
  • In your functions.php, when you var_dump($cats), do you get the array of desired result?
    – Annapurna
    Sep 19 '17 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 '17 at 9:39
  • please check if "category_$c" exists
    – Annapurna
    Sep 19 '17 at 9:43
  • Yes. The image does exist...
    – Siyah
    Sep 19 '17 at 10:03

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.