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 ){
  • 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

  • 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.