Hello I am trying to have a default featured image set for post_type = 'post' only excluding post_type = 'page'.
I wrote the following code in the functions file of the child theme but i keep getting this error:
Notice: Trying to get property of non-object in /home/ossettto/public_html/wp-content/themes/sport-child/functions.php on line 18
function wpforce_featured()
{
global $post;
$post_type = get_post_type($post->ID);
if ($post_type === 'post')
{
$already_has_thumb = has_post_thumbnail($post->ID); // If post have a featured image use that.
if (!$already_has_thumb)
{
//If post does not have a featured image then get the first post image and set as featured image.
$attached_image = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1"); // Number 1 relates to taking post image number 1 and adding it as a featured image.
if ($attached_image)
{
foreach ($attached_image as $attachment_id => $attachment)
{
set_post_thumbnail($post->ID, $attachment_id);
//$attachment_id = attachment_url_to_postid( $image_url );
//echo $attachment_id;
}
}
else
{
set_post_thumbnail($post->ID, '27264'); // Find attachment media id by right clicking the image in the Media library and selecting inspect element. Look for the data-id number. This number is then added to the post id.
}
}
}
}
//end function
add_action('the_post', 'wpforce_featured');
add_action('save_post', 'wpforce_featured');
add_action('draft_to_publish', 'wpforce_featured');
add_action('new_to_publish', 'wpforce_featured');
add_action('pending_to_publish', 'wpforce_featured');
add_action('future_to_publish', 'wpforce_featured');
Any help will be appreciated.
Thanks.
Two things are unclear:
the_post,save_post, and the other hooks all together.$post_type = get_post_type( $post->ID );.However, the reason you are getting the notice is that these actions don't necessarily all have the
$postobject ready for you toglobal $post. Further, these actions all have different function signatures, passing$postas a parameter in different places.Given all the filters you are hooking into, you need to create an "abstraction" or "wrapper" around your function so that you can call it properly with
$postin the proper position of the arguments.Look at the docs to see examples of where
$postis being passed:the_post action - passes as ONLY parameter
save_post action - passes as SECOND parameter
draft_to_published (and other hooks) - passes as THIRD parameter