Hi Guys,
Im new to sage and i spent a lot of hours looking for a solution here, but in vain.
I hope someone can help:
In sage 9 i used this function display a featured image:
public static function featuredImage()
{
if (has_post_thumbnail()) {
$img = the_post_thumbnail('medium', array('class' => 'img-fluid'));
} else {
$img = '<img class="img-fluid" src="' . \App\asset_path("images/image-default.png") . '" alt="" />';
}
return $img;
}
I call it like this:
-
{!! $thumbnail !!} in an ACF Block and in content-single.blade.php
In sage 10, it didn’t work:
-
\App\asset_path doesn’t work, undefined
-
if (has_post_thumbnail()) return false all the time.
Where are you using this function?
has_post_thumbnail() require the global $post if you aren’t passing an ID to it, so it sounds like you’re calling it in a context where the global $post isn’t available. Personally I don’t like relying on the global $post ever–I pass IDs, etc, whenever I want something so that I know exactly what is being used.
\App\asset_path() is undefined because Sage 10 no longer uses that function. I would recommend using \Roots\asset() instead. This will return an Asset from which you can get a URL (as well as a number of other useful things).
Thank you for your reply.
The Path works.
Any suggestion for the has_post_thumbnail() ?
In App\View\Composers\App.php
How are you calling it?
I’d recommend refactoring it to take an ID/post argument, and then passing that argument when you call it, i.e.
public static function featuredImage($id)
{
if (has_post_thumbnail($id)) {
$img = get_post_thumbnail($id, 'medium', array('class' => 'img-fluid'));
} else {
$img = '<img class="img-fluid" src="' . \Roots\asset("images/image-default.png")->url . '" alt="" />';
}
return $img;
}
Thank you, but how can i call it ? like this. ?
{{ featuredImage(ID) }}