- This topic has 23 replies, 5 voices, and was last updated 6 years, 5 months ago by
Tom.
-
AuthorPosts
-
August 23, 2019 at 10:06 am #991745
Tom
Lead DeveloperLead DeveloperOk, we have a solution.
First, we need to edit
wp-content/plugins/gp-premium/elements/class-hero.php.On line
457, replace this:return $css->css_output();With this:
return apply_filters( 'generate_page_hero_css_output', $css->css_output(), $options );For anyone else reading, this part is only necessary in versions before GPP 1.9.
Now we can use this filter to add a different image size as the page hero background:
add_filter( 'generate_page_hero_css_output', function( $output, $options ) { $mobile_image_url = false; $css = false; if ( $options['background_image'] && function_exists( 'get_the_post_thumbnail_url' ) ) { if ( 'featured-image' === $options['background_image'] ) { if ( is_singular() ) { $mobile_image_url = get_the_post_thumbnail_url( get_the_ID(), 'medium' ); } if ( ! $mobile_image_url ) { $mobile_image_url = get_the_post_thumbnail_url( $options['element_id'], 'medium' ); } } if ( 'custom-image' === $options['background_image'] ) { $mobile_image_url = get_the_post_thumbnail_url( $options['element_id'], 'medium' ); } } if ( $mobile_image_url ) { if ( $options['background_color'] && $options['background_overlay'] ) { $background_image = 'linear-gradient(0deg, ' . $options['background_color'] . ',' . $options['background_color'] . '), url(' . $mobile_image_url . ')'; } else { $background_image = 'url(' . $mobile_image_url . ')'; } $css = '@media (max-width: 768px) { .page-hero { background-image: ' . $background_image . ' } }'; } return $output . $css; }, 10, 2 );It’s important to note that this might change between now and 1.9. If it does, I’ll be sure to update you.
October 7, 2019 at 5:29 pm #1028871Rozanne
Hi, any news on this issue? It would speed up the sites using your theme considerably and allow people to display their Hero images properly (which gets you higher SEO too), by choosing the WP image size with crop dimensions that suit the Hero dimensions they chose. (I don’t see the version 1.9 available for download in my account, so…)
October 8, 2019 at 5:12 am #1029130David
StaffCustomer SupportHi there
1.9 is still under development – we’re hoping for the Beta to be released this month.
October 10, 2019 at 4:47 pm #1031668Steven
I tried to follow Tom’s instructions to add this update, but not sure I’m getting the results I expect. Also, does this just specify the image rendition (medium) for the hero (any sized screen) and not provide a way to also specify the image rendition for mobile separately? Was hoping for a solution that would allow both to be set so we get an optimized version of the feature image for desktop and for mobile.
October 11, 2019 at 9:28 am #1032205Tom
Lead DeveloperLead DeveloperThe above solution will get the “medium” version of the featured image (as opposed to the large), and display it on mobile screens. It doesn’t give you an option to upload a separate image for mobile.
It looks like your site is showing the full size on mobile as well – does the “medium” image size exist on your site?
October 11, 2019 at 10:49 am #1032279Steven
OK – I think you’ve clarified it a bit. When the screen width gets below 768, then the theme will use the Medium thumbnail rendition of the feature image as set in the Media settings. This does appear to be working – I just forgot I had to regenerate thumbnails after changing the Medium dimensions.
However, when the screen width is above 768, it seems the full res version of the image is used (not the Large thumbnail rendition). Is there a way we can modify the solution to use the Large thumbnail rendition for screens above 768 instead of the full res version? Otherwise, we have similar issues on desktop of getting a much larger image than needed in many cases.
Also, can we reference different image sizes by changing the Medium (and Large) parameter in the code? That would allow us to specify two image sizes with exact height and width instead of using the baked in proportional image sizes in the Media Settings of WP. That may save a lot in file sizes – especially for portrait images.
For example, adding the following to the functions.php file and then referencing ‘hero-small’ and ‘hero-large’ in the code:
add_image_size( ‘hero-small’, 800, 500 );
add_image_size( ‘hero-large’, 2000, 500 );October 11, 2019 at 8:19 pm #1032507Tom
Lead DeveloperLead DeveloperYou can do that like this: https://generatepress.com/forums/topic/updating-the-header-in-the-posts-page/#post-1025791
If you create your own image size, you just need to update the references to
mediumandlargein the code.Let me know if you need more info 🙂
October 14, 2019 at 3:16 pm #1034613Steven
Thanks for the quick response Tom. Here’s what I ended up with in my child theme’s function.php file that appears to be working:
//Add new image sizes add_image_size('hero-small',800,500,true); add_image_size('hero-large',2000,500,true); //Set hero image add_filter( 'generate_page_hero_background_image_url', function( $image_url, $options ) { if ( is_singular() && has_post_thumbnail() ) { $image_url = get_the_post_thumbnail_url( get_the_ID(), 'hero-large' ); } return $image_url; }, 10, 2 ); //Set hero mobile image add_filter( 'generate_page_hero_css_output', function( $output, $options ) { $mobile_image_url = false; $css = false; if ( $options['background_image'] && function_exists( 'get_the_post_thumbnail_url' ) ) { if ( 'featured-image' === $options['background_image'] ) { if ( is_singular() ) { $mobile_image_url = get_the_post_thumbnail_url( get_the_ID(), 'hero-small' ); } if ( ! $mobile_image_url ) { $mobile_image_url = get_the_post_thumbnail_url( $options['element_id'], 'hero-small' ); } } if ( 'custom-image' === $options['background_image'] ) { $mobile_image_url = get_the_post_thumbnail_url( $options['element_id'], 'hero-small' ); } } if ( $mobile_image_url ) { if ( $options['background_color'] && $options['background_overlay'] ) { $background_image = 'linear-gradient(0deg, ' . $options['background_color'] . ',' . $options['background_color'] . '), url(' . $mobile_image_url . ')'; } else { $background_image = 'url(' . $mobile_image_url . ')'; } $css = '@media (max-width: 768px) { .page-hero { background-image: ' . $background_image . ' } }'; } return $output . $css; }, 10, 2 );It would be great to have the option to specify these settings in the GUI for the hero element. Based on the support posts, there seems to be some interest. There may also be some users that don’t understand the bandwidth, storage, and page load time savings by having this in place so they don’t know to ask for it.
Thanks again for the workaround!
October 14, 2019 at 8:11 pm #1034755Tom
Lead DeveloperLead DeveloperI agree – I’ll look into this 🙂
Thanks for posting your solution!
-
AuthorPosts
- You must be logged in to reply to this topic.