O'Reilly

Add META Tags, Scripts, and Stylesheets to the WordPress Header and Footer

By on  

There are times where you may want to conditionally inject stylesheets or scripts into your header or footer, or you'd simply prefer to inject those resources via PHP instead of place the HTML in template files directly.  WordPress' ever-powerful add_filter function provides the a method for injecting stylesheets or scripts into the header, as well as scripts into the footer.  Here's how!

// Add items to the header!
function shimify() {
	echo '<!--[if lt IE 9]><script src="/wp-content/themes/mytheme/shim.js"></script><![endif]-->';
	echo '<style>/* some styles here */</style>';
	echo '<meta http-equiv="content-type" content="text/html;" />';
}
add_filter('wp_head', 'shimify');

// Add items to the footer
function add_requirejs() {
	echo '<script src="/wp-content/themes/mytheme/requirejs.js"></script>';
}
add_filter('wp_footer', 'add_requirejs');

The add_filter function, which accepts the filter type, action function, and optional priority, provides the means to inject stylesheets and JavaScript files wherever desired.  You may want to conditionally inject a different Google Analytics account if you use a WordPress install that loads different content depending on hostname.  Do not use this technique if you're adding stylesheets or scripts for your plugin -- those should be added with the proper WordPress functions!

Track.js Error Reporting

Upcoming Events

Recent Features

  • How I Stopped WordPress Comment Spam

    I love almost every part of being a tech blogger:  learning, preaching, bantering, researching.  The one part about blogging that I absolutely loathe:  dealing with SPAM comments.  For the past two years, my blog has registered 8,000+ SPAM comments per day.  PER DAY.  Bloating my database...

  • Create a CSS Cube

    CSS cubes really showcase what CSS has become over the years, evolving from simple color and dimension directives to a language capable of creating deep, creative visuals.  Add animation and you've got something really neat.  Unfortunately each CSS cube tutorial I've read is a bit...

Incredible Demos

  • Event Delegation with MooTools

    Events play a huge role in JavaScript. I can't name one website I've created in the past two years that hasn't used JavaScript event handling on some level. Ask yourself: how often do I inject elements into the DOM and not add an...

  • MooTools Star Ratings with MooStarRating

    I've said it over and over but I'll say it again:  JavaScript's main role in web applications is to enhance otherwise boring, static functionality provided by the browser.  One perfect example of this is the Javascript/AJAX-powered star rating systems that have become popular over the...

Discussion

  1. chrismccoy

    you should really avoid doing it that way, echoing tags, you should use wp_enqueue_script and wp_enqueue_style instead

    • For plugins sure, but it’s not as important for theme scripts. Additionally, these techniques could be used for META tags too.

  2. This definitely is not a proper way of including scripts in WordPress and should be avoided. Function wp_enqueue_script has a parameter to include the scripts in the footer and should be used instead of the above methods.

    With built in WordPress function you can easily control script dependencies and make sure that nothing is included twice …

  3. If you want to add css and js to individual posts or pages you could use my plugin perpost-code: http://wordpress.org/extend/plugins/superslider-perpost-code/ it provides a meta box on the edit screen for your css or javascript, it also provides a shortcode to display that same code into your post, check it out, you’ll love it!

    I also agree with Codeforest, wp_enqueue_script and wp_enqueue_style are the way to go, especially if you are using a minify plugin, they usually only minify code and script loaded via the enqueue function

  4. SpencerW

    I agree with the others this is not the right approach. You should use the right enqueue command. Apart from duplication, it allows you to also specify dependencies such as jquery for your javascript.
    Also performance plugins that rely on finding the js/css for a page as part of the
    combination and minification process will fail.

    You can limit specific code and css to a specific page or post using templates or with a plugin as already recommended above.

  5. Joe wattson

    hi David, I know about adding javascripts at the footer and header of the page. But adding stylesheet at the bottom of the page is something new and it drives me crazy? Is it really possible to use stylesheets at the footer?

  6. ou may want to conditionally inject a different Google Analytics account if you use a WordPress install that loads different content depending on hostname, allows you to also specify dependencies such as jquery for your javascript.

  7. alin

    This method can be useful when you going to make a theme with unlimited colors. This helps me thanks.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • OâReilly Velocity Conference â New York

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • Free Download: Font Bundle Featuring 17 Incredible Typefaces

    The only thing we love more than a good font, is a good free font. So we’ve combed the Web for some of our favorite free fonts, and gathered them here in a single download. You’ll find a variety of useful typefaces, from highly geometric designs...

  • OâReilly Velocity Conference â Amsterdam

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • CanIUse Command Line

    Every front-end developer should be well acquainted with CanIUse, the website that lets you view browser support for browser features.  When people criticize my blog posts for not detailing browser support for features within the post, I tell them to check CanIUse:  always up to date, unlike...

  • Generating Alternative Stylesheets for Browsers Without @media

    If your CSS code is built with a mobile-first approach, it probably contains all the rules that make up the "desktop" view inside @media statements. That's great, but browsers that don't support media queries (IE 8 and below) will simply ignore them, ending up getting the...