Get Featured Image in pseudo elements( i.e. :before or :after) - WordPress
-
I want to get WordPress featured image in pseudo elements. I've used it in inline style using following code <?php $thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' ); ?> <div style="background-image: url(<?php echo $thumb_url[0]; ?>);"> But I want to use it in pseudo elements
-
Answer:
Option 1 Your main concern here is caching. You don't want to write the background-image style into your external .css file because it will probably change on every page. But you don't want to clog up your main HTML file with lots of extra inline styles. Your best bet is to split off just what you don't want cached (the background-image and the rest of the styles). We want to inline just what shouldn't be cached, and leave the rest as an external .css file. Say the styles relevant to your Featured Images container are something like this: figure::before { display:block; height:300px; width:500px; margin:0; background-image:url(); background-size:cover; background-position:center center; } Just leave your .css file exactly the same format (don't use .css.php), but pull out the background-image line. Then in the header, place this: <style> figure::before { <?php $thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' ); background-image: url(<?php echo $thumb_url[0];?>); } </style> Bonus - Another Option Just for Fun The second option is to use a .php file with a .css HTTP header. I like to name my files something like: styles.css.php Advantages This lets you use WordPress variables and data, as well as the entire power of PHP, directly in your stylesheet. But it's still sent to the browser as a .css file, so you can enqueue it like normal. It's the easiest to implement. Note, be sure to include the global post object. Disadvantages Do you use resource caching? If you .css files are cached, you're going to run into a problem because the file won't change on each page. In your specific case, the Featured Image will be different on each page. If you don't cache, it should be fine, but you absolutely should be caching, so you should probably skip this option. Tweak on Bonus Option If you like Option 1 but you do cache (which you should), you can take a middle ground. Create your file the same as above, something like: styles.css.php Instead of enqueueing it the https://codex.wordpress.org/Function_Reference/wp_enqueue_style using wp_enqueue_style, you can read the file with PHP's include function. Create a function in your functions.php file: function writeInlineCSS() { include TEMPLATEPATH . '/styles/styles.css.php'; } Then in your header, add: <style> <?php writeInlineCSS(); ?> </style> The CSS will be pulled in and written inline. Advantages Caching won't be a problem. Also you won't have a large render blocking .css resource. Plus the advantages from Option 1. Disadvantages You are including potentially a massive chunk of CSS inline. Possibly too much.
w3debugger at Stack Overflow Visit the source
Other answers
This is pulling from Mr Lister's comment, but here's a method of doing this. It's not the best way to structure the html, but it should work: <?php $thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' ); ?> <div class="myDiv"></div> <style type="text/css"> .myDiv:before{ background-image: url('<?php echo $thumb_url[0]; ?>'); content: ''; } </style> I'm not sure if you'll run into some browser compatibility issues with older browsers and the tag outside of the , but it should work in modern browsers.
Joe
Related Q & A:
- How to get my address book to open an e-mail when I click on address?Best solution by Yahoo! Answers
- How do I e-mail photos on an host computer from my Yahoo e-mail?Best solution by Yahoo! Answers
- How do you get featured by youtube?Best solution by Yahoo! Answers
- How do i get rid of my attachments in my e-mail?Best solution by Yahoo! Answers
- How do I get an image copyrighted?Best solution by ehow.com
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.