Setting featured image with function, 1 part not working

I’m trying to set a post’s featured image based on custom fields. There are different types of posts and therefore the featured image should be set depending on which custom fields have been filled out.

Here is what I currently have (edited):

Read More
//Set post thumbnail based on various conditions
        if (get_post_meta($post_id, 'featured_image', true)) {
            $attachment_id = get_post_meta($post_id, 'featured_image', true);
        } elseif (get_post_meta($post_id, 'upload_single_image', true)) {
            $attachment_id = get_post_meta($post_id, 'upload_single_image', true);
        } elseif (get_post_meta($post_id, 'create_gallery', false)) {
            $gallery = get_post_meta($post_id, 'create_gallery', false);//get the full gallery
            $attachment_id = $gallery[0]['upload_image']; //Get image from first row    
        }

The first two conditions are working, but the third condition (create gallery) isn’t. I thought that getting the first row of the db table and then calling the name of the custom meta data would do it, but it’s not working.

Anyone see what I might be doing wrong?

Related posts

Leave a Reply

2 comments

  1. You have to set the $single paramter of get_post_meta to false (or don’t set it) to get an array.

    Here is a sped-up version:

        if ($attachment_id = get_post_meta($post_id, 'featured_image',      true)) :
    elseif ($attachment_id = get_post_meta($post_id, 'upload_single_image', true)) :
    elseif ($attachment_id = get_post_meta($post_id, 'create_gallery',     false)) :
        $attachment_id = $attachment_id[0]['upload_image'];
    endif;
    

    Note: I did not test this.


    // EDIT
    Here is the code with the ACF function:

        if ($attachment_id = get_post_meta($post_id, 'featured_image',      true)) :
    elseif ($attachment_id = get_post_meta($post_id, 'upload_single_image', true)) :
    elseif ($gallery = get_field('create_gallery', $post_id)) :
        $attachment_id = $gallery[0]['upload_image'];
    endif;
    
  2. Got it to work by using ACF’s custom functions instead of wp’s meta functions.

    Final working result:

    //Set post thumbnail based on various conditions
            if (get_post_meta($post_id, 'featured_image', true)) {
                $attachment_id = get_post_meta($post_id, 'featured_image', true);
            } elseif (get_post_meta($post_id, 'upload_single_image', true)) {
                $attachment_id = get_post_meta($post_id, 'upload_single_image', true);
            } elseif (get_field('create_gallery', $post_id)) {
                $gallery = get_field('create_gallery', $post_id);//get the full gallery
                $attachment_id = $gallery[0]['upload_image']; //Get image from first row    
            }