<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>beer planet &#187; wp_print_scripts</title> <atom:link href="http://beerpla.net/tag/wp_print_scripts/feed/" rel="self" type="application/rss+xml" /><link>http://beerpla.net</link> <description>where things have nothing to do with beer - tutorials, tips, how-tos, thoughts, hacks, and other techy nonsense</description> <lastBuildDate>Fri, 06 Jan 2012 08:50:59 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <atom:link rel='hub' href='http://beerpla.net/?pushpress=hub'/> <item><title>Follow-up To Loading CSS And JS Conditionally</title><link>http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/</link> <comments>http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/#comments</comments> <pubDate>Fri, 15 Jan 2010 20:07:40 +0000</pubDate> <dc:creator>Artem Russakovskii</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[Wordpress]]></category> <category><![CDATA[action]]></category> <category><![CDATA[admin_print_scripts]]></category> <category><![CDATA[admin_print_styles]]></category> <category><![CDATA[conditional]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[enqueue]]></category> <category><![CDATA[hook]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[js]]></category> <category><![CDATA[load]]></category> <category><![CDATA[ob_flush]]></category> <category><![CDATA[ob_start]]></category> <category><![CDATA[optimization]]></category> <category><![CDATA[output buffer]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[script]]></category> <category><![CDATA[style]]></category> <category><![CDATA[time]]></category> <category><![CDATA[wp_enqueue_script]]></category> <category><![CDATA[wp_enqueue_style]]></category> <category><![CDATA[wp_print_scripts]]></category> <category><![CDATA[wp_print_styles]]></category> <guid
isPermaLink="false">http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/</guid> <description><![CDATA[<p>First of all, I&#039;d like to thank everyone who read and gave their 2 cents about the <a
href="http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/">[Wordpress Plugin Development] How To Include CSS and JavaScript Conditionally And Only When Needed By The Posts</a> post. The article was well received and will hopefully spark some optimizations around loading styles and scripts.</p><p>Here are some discussions and mentions around the web:</p><ul><li><a
href="http://weblogtoolscollection.com/archives/2010/01/15/how-to-include-css-and-javascript-conditionally/" rel="nofollow">an article</a> on Weblog Tools Collection</li><li><a
href="http://www.wptavern.com/forum/resources/1213-including-javascript-css-conditionally.html" rel="nofollow">a forum post</a> on WP Tavern</li><li><a
href="http://topsy.com/tb/ping.fm/DIM0S" rel="nofollow">twitter</a> retweets</li></ul><p>Sure, there are drawbacks to this method and it does require some more processing on the backend and it&#039;s not for everyone, which is why we should always strive for an even better solution.</p><p>I stand by my point of...<div
class=clear></div> <a
href="http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/" class="read_more"><div
class=excerpt-end>Read the rest of this article &#187;</div></a></p>]]></description> <content:encoded><![CDATA[<p>First of all, I&#039;d like to thank everyone who read and gave their 2 cents about the <a
href="http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/">[Wordpress Plugin Development] How To Include CSS and JavaScript Conditionally And Only When Needed By The Posts</a> post. The article was well received and will hopefully spark some optimizations around loading styles and scripts.</p><p>Here are some discussions and mentions around the web:</p><ul><li><a
href="http://weblogtoolscollection.com/archives/2010/01/15/how-to-include-css-and-javascript-conditionally/" rel="nofollow">an article</a> on Weblog Tools Collection</li><li><a
href="http://www.wptavern.com/forum/resources/1213-including-javascript-css-conditionally.html" rel="nofollow">a forum post</a> on WP Tavern</li><li><a
href="http://topsy.com/tb/ping.fm/DIM0S" rel="nofollow">twitter</a> retweets</li></ul><p>Sure, there are drawbacks to this method and it does require some more processing on the backend and it&#039;s not for everyone, which is why we should always strive for an even better solution.</p><p>I stand by my point of view that, for instance, my dedicated gallery shouldn&#039;t load for people who will never even go see my photos.</p><p>I think an ideal solution would be for WP core developers, who had a lot of experience designing WordPress&#039; internals and who know what can work and what can&#039;t, perhaps <a
href="http://www.ma.tt" rel="nofollow">Matt</a> included, to get together and think about a better solution really hard.</p><p>Conditional loading similar to the one discussed here is already possible in the admin area, which creates dynamic hooks by appending page ids to <strong><em>&#039;admin_print_styles&#039;</em></strong> and <strong><em>&#039;admin_print_scripts&#039;</em></strong>. It is, however, still not good enough to be used more generically because those hooks rely on the page you are on, rather than the content of that page.</p><p>Another possibility is using a PHP technique called <strong><em>output buffering</em></strong> (<a
href="http://php.net/manual/en/function.ob-start.php" rel="nofollow"><strong><em>ob_start()</em></strong></a>, <a
href="http://www.php.net/manual/en/function.ob-flush.php" rel="nofollow"><strong><em>ob_flush()</em></strong></a>, etc) that grants second chances to data that had already been echoed. It intercepts all echo and print calls and redirects them into a memory buffer, so instead of printing data to the page right away, you can now modify the header even if it had already been processed. It&#039;s like giving it a second chance.</p><p>Would it work for WordPress? I am not sure but I sure could use your feedback, devs.</p><p><div
class="note"><div
class="notetip"><strong>Update: </strong>Scribu, a WordPress master, <a
href="http://scribu.net/wordpress/optimal-script-loading.html" rel="nofollow">came up with the approach</a> that would at least handle loading JS, as it would put it in the footer, which can be done after the posts have been parsed.</p><p>His approach doesn&#039;t handle CSS which is why I decided to seek another solution but it doesn&#039;t require an extra pass through the posts and it benefits from using the shortcode API instead of stripos() or some hacky regex you&#039;d need to come up with.</p><p>It&#039;s a great compromise for developers who do not want to take the approach I outlined in the article linked at the top of this page.</div></div></p><div
class="shr-bookmarks shr-bookmarks-expand"><ul
class="socials"><li
class="shr-twitter"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li
class="shr-facebook"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li
class="shr-googlebuzz"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a></li><li
class="shr-reddit"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a></li><li
class="shr-hackernews"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=202&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Submit this to Hacker News">Submit this to Hacker News</a></li><li
class="shr-delicious"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li
class="shr-stumbleupon"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up+To+Loading+CSS+And+JS+Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li
class="shr-mail"> <a
href="http://www.shareaholic.com/api/share/?title=Follow-up%20To%20Loading%20CSS%20And%20JS%20Conditionally&amp;link=http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/&amp;notes=First%20of%20all%2C%20I%27d%20like%20to%20thank%20everyone%20who%20read%20and%20gave%20their%202%20cents%20about%20the%20%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts%20post.%20The%20article%20was%20well%20received%20and%20will%20hopefully%20spark%20some%20optimizations%20around%20loading%20styles%20an&amp;short_link=http://bit.ly/76og1l&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=201&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a></li></ul><div
style="clear: both;"></div></div> Similar Posts:<ul><li><a
href="http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/" rel="bookmark" title="January 13, 2010">[WordPress Plugin Development] How To Include CSS and JavaScript Conditionally And Only When Needed By The Posts</a></li><li><a
href="http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/" rel="bookmark" title="February 17, 2009">Swapping Column Values in MySQL</a></li><li><a
href="http://beerpla.net/2010/11/06/how-to-dynamically-increase-memory-limits-when-interfacing-with-wordpress-using-xml-rpc-windows-live-writer-etc/" rel="bookmark" title="November 6, 2010">How To Dynamically Increase Memory Limits When Interfacing With WordPress Using XML-RPC (Windows Live Writer, Etc)</a></li><li><a
href="http://beerpla.net/2010/01/31/how-to-remove-inline-hardcoded-recent-comments-sidebar-widget-style-from-your-wordpress-theme/" rel="bookmark" title="January 31, 2010">How To Remove Inline Hardcoded Recent Comments Sidebar Widget Style From Your WordPress Theme</a></li><li><a
href="http://beerpla.net/2010/03/21/how-to-diagnose-and-fix-incorrect-post-comment-counts-in-wordpress/" rel="bookmark" title="March 21, 2010">How To Diagnose And Fix Incorrect Post Comment Counts In WordPress</a></li></ul><p><a
class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fbeerpla.net%2F2010%2F01%2F15%2Ffollow-up-to-loading-css-and-js-conditionally%2F&amp;title=Follow-up%20To%20Loading%20CSS%20And%20JS%20Conditionally" id="wpa2a_2"><img
src="http://beerpla.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded> <wfw:commentRss>http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>[WordPress Plugin Development] How To Include CSS and JavaScript Conditionally And Only When Needed By The Posts</title><link>http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/</link> <comments>http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/#comments</comments> <pubDate>Wed, 13 Jan 2010 17:15:00 +0000</pubDate> <dc:creator>Artem Russakovskii</dc:creator> <category><![CDATA[Tips]]></category> <category><![CDATA[Tutorials]]></category> <category><![CDATA[Wordpress]]></category> <category><![CDATA[action]]></category> <category><![CDATA[admin_print_scripts]]></category> <category><![CDATA[admin_print_styles]]></category> <category><![CDATA[conditional]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[enqueue]]></category> <category><![CDATA[hook]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[js]]></category> <category><![CDATA[load]]></category> <category><![CDATA[optimization]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[script]]></category> <category><![CDATA[style]]></category> <category><![CDATA[time]]></category> <category><![CDATA[wp_enqueue_script]]></category> <category><![CDATA[wp_enqueue_style]]></category> <category><![CDATA[wp_print_scripts]]></category> <category><![CDATA[wp_print_styles]]></category> <guid
isPermaLink="false">http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/</guid> <description><![CDATA[<h2>Introduction</h2><p><img
style="margin: 0px 10px 10px 0px; display: inline" title="wordpress logo" alt="wordpress logo" align="left" src="http://beerpla.net/wp-content/uploads/WordpressPluginWritersTakeNoteHowToInclu_863C/image_3.png" width="150" height="150" /> In this tutorial, I am going to introduce a WordPress technique that I believe was unpublished until I <a
href="http://wordpress.org/support/topic/350167" rel="nofollow">raised the question</a> a few days ago on the WordPress forums.</p><p>In short, the problem I was trying to solve was <strong><em>plugins unnecessarily loading their JavaScript and CSS on *every* page of the blog, even when doing so would achieve absolutely nothing and the plugin wouldn&#039;t do any work</em></strong>.</p><p><div
class="note"><div
class="notetip"><strong>Update #1:</strong> I have posted a <a
href="http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/">follow-up</a> in response to some comments received around the web.</div></div></p><p><div
class="note"><div
class="notetip"><strong>Update #2:</strong> There is a solution that can be considered a compromise as it works well for loading JavaScript but doesn&#039;t handle CSS.</div></div></p><p>I briefly mentioned this approach here but but Scribu...<div
class=clear></div> <a
href="http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/" class="read_more"><div
class=excerpt-end>Read the rest of this article &#187;</div></a></p>]]></description> <content:encoded><![CDATA[<h2>Introduction</h2><p><img
style="margin: 0px 10px 10px 0px; display: inline" title="wordpress logo" alt="wordpress logo" align="left" src="http://beerpla.net/wp-content/uploads/WordpressPluginWritersTakeNoteHowToInclu_863C/image_3.png" width="150" height="150" /> In this tutorial, I am going to introduce a WordPress technique that I believe was unpublished until I <a
href="http://wordpress.org/support/topic/350167" rel="nofollow">raised the question</a> a few days ago on the WordPress forums.</p><p>In short, the problem I was trying to solve was <strong><em>plugins unnecessarily loading their JavaScript and CSS on *every* page of the blog, even when doing so would achieve absolutely nothing and the plugin wouldn&#039;t do any work</em></strong>.</p><p><div
class="note"><div
class="notetip"><strong>Update #1:</strong> I have posted a <a
href="http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/">follow-up</a> in response to some comments received around the web.</div></div></p><p><div
class="note"><div
class="notetip"><strong>Update #2:</strong> There is a solution that can be considered a compromise as it works well for loading JavaScript but doesn&#039;t handle CSS.</p><p>I briefly mentioned this approach here but but Scribu decided to expand on it by providing a nice Jedi-themed tutorial. It is available <a
href="http://scribu.net/wordpress/optimal-script-loading.html" rel="nofollow">here</a>.</div></div></p><p>Let me explain using this example:</p><ul><li>a code formatter plugin only does something useful when it sees a [code] shortcode in any post on the page.</li><li>most of your posts do not contain the [code] shortcode as you don't include code snippets that often or you only started using this particular plugin recently.</li><li>the plugin, however, loads the CSS and JS (which are most likely <a
href="http://qbnz.com/highlighter/" rel="nofollow">GeSHi</a> and take up loads of space) on every page.</li><li>these CSS and JS do absolutely nothing on most page loads.</li><li>bandwidth is wasted, extra DNS and HTTP requests are processed, the browser is slowed down, and for what? For no good reason, other than the plugin author didn't know how to achieve this conditional loading.</li></ul><p>If you think about it, there are many plugins that only do something once in a blue moon. Table of contents, text manipulators, galleries, sliders, etc, etc. If only they loaded their frontend code strictly when necessary, most page loads would suddenly become much lighter.</p><p>So what can we do to solve this? Let's look at a few techniques.</p><h2>Loading CSS And JS In Place?</h2><p>Here's one, albeit pretty bad, solution - only print the CSS and JS includes if and when you determine somewhere in the middle of loading the posts that the scripts and styles are indeed needed, then set a flag to avoid printing them again. In our example, that would be when the plugin detects the [code] shortcode.</p><p>This, however, is a mediocre solution because, while it's not a bad idea to load Javascript in the footer, <a
href="http://developer.yahoo.com/performance/rules.html" rel="nofollow">CSS should be loaded in the header</a>, otherwise the page might look unformatted until the CSS is reached.</p><p>Additionally, it's not the cleanest and most robust solution because you shouldn't be writing &lt;script&gt; and &lt;style&gt; tags manually but rather using <a
href="http://codex.wordpress.org/Function_Reference/wp_enqueue_style" rel="nofollow">wp_enqueue_style()</a> and <a
href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script" rel="nofollow">wp_enqueue_script()</a> functions.</p><h2>What's This About wp_enqueue_FOO?</h2><p>Now, you might say: &quot;What's this about <strong><em>wp_enqueue_style()</em></strong>, <strong><em>wp_enqueue_script()</em></strong>, and then hooking into <strong><em>'wp_print_scripts'</em></strong>, <strong><em>'wp_print_styles'</em></strong>, <strong><em>'admin_print_scripts'</em></strong>, and <strong><em>'admin_print_styles'</em></strong> hooks&quot;? You know about these, right? Right??</p><p>Allow me to explain this, in my opinion, greatest and most underused WordPress paradigm in a short refresher:</p><p><div
class="note"><div
class="noteclassic">WordPress has a great system of queuing up the scripts and styles your script will need to use and printing them all in one go, rather than hooking into wp_head and printing &lt;style&gt; and &lt;script&gt; tags manually.</p><p>This queuing system achieves 2 main goals:</p><ul><li>the <strong><em>same scripts are not loaded multiple times</em></strong>, such as <a
href="http://jquery.com/" rel="nofollow">jQuery</a>, <a
href="http://script.aculo.us/" rel="nofollow">scriptaculous</a>, or any other custom script or style your plugins may share between each other or even other plugins.</li><li>it introduces support for establishing <strong><em>dependencies</em></strong>. You can specify that your script or style depends on another script or style, and WordPress will take care of loading them in the right order. Guaranteed.</li><li>oh what the hell, here's a 3rd one: <strong><em>elegance</em></strong>.</li></ul><p>Here is the way this usually works:</p><ul><li>in the beginning of your plugin you attach to <strong><em>wp_print_scripts</em></strong> and/or <strong><em>wp_print_styles</em></strong> hooks. For example:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
</pre></td><td
class="code"><pre>add_action( 'wp_print_scripts', 'enqueue_my_scripts' );
add_action( 'wp_print_styles', 'enqueue_my_styles' );</pre></td></tr></table></div><p>What this will do is call the functions in the 2nd parameter when it's time to execute any functions associated with the hooks in the 1st parameter. It is the main principle behind the WordPress plugin architecture.</li><li>looking at the script example, in the <strong><em>enqueue_my_scripts()</em></strong> function, you can do something like:<div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre>wp_enqueue_script( 'my_awesome_script', '/script.js', array( 'jquery' ));</pre></td></tr></table></div><p>which would queue up your script to be printed later but only after jQuery.</p><p>If you or some other plugin calls <strong><em>wp_enqueue_script()</em></strong> with the same first parameter (unique handle), it will just be ignored, rather than printed to the page twice.</li><li>styles are exactly the same, except you use <strong><em>wp_enqueue_style()</em></strong></li></ul><p>There is a variation of this functionality for the admin styles and scripts - all you have to do is change the hooks to <strong><em>admin_print_styles</em></strong> and <strong><em>admin_print_scripts</em></strong>. Ozh made a nice post on this topic <a
href="http://planetozh.com/blog/2008/04/how-to-load-javascript-with-your-wordpress-plugin/" rel="nofollow">here</a> - check it out.</p><p></div></div></p><h2>Enqueuing Alone Is Not Enough</h2><p>Enqueuing is great for loading your JS and CSS but using it alone doesn't achieve the conditional behavior that we are looking for here.</p><p>This is a classic case of Chicken or the Egg, because WordPress makes only one pass through all of the content.</p><p>You see, since the header needs to be printed before the content, <strong><em>wp_print_scripts</em></strong> and <strong><em>wp_print_styles</em></strong> hooks are triggered before you even get to the posts. If you enqueue a script or style from within the 'the_content' hook, for example, the queued up scripts and styles will never get printed. It's too late to print them then anyway, as you're already in the middle of printing the posts.</p><h2>The Solution</h2><p>What we need to do is take a step back, before even printing the header, and then peek ahead.</p><p>Sure, this adds an extra pass over some data, but since no filters are applied during this process and if you avoid regular expressions (using stripos(), for example), this extra pass should be quite negligible.</p><p><div
class="note"><div
class="notewarning">A word of warning though: I'd rather see false positives (enqueuing when it's not needed) than false negatives (miss enqueuing when it's needed), so please do your matching wisely and test well.</div></div></p><p>The upside, however, can be potentially very substantial.</p><p>Credit goes to <a
href="http://twitter.com/white_shadow" rel="nofollow">@white_shadow</a> for the idea.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td
class="code"><pre>add_filter('the_posts', 'conditionally_add_scripts_and_styles'); // the_posts gets triggered before wp_head
function conditionally_add_scripts_and_styles($posts){
	if (empty($posts)) return $posts;
&nbsp;
	$shortcode_found = false; // use this flag to see if styles and scripts need to be enqueued
	foreach ($posts as $post) {
		if (stripos($post-&gt;post_content, '[code]') !== false) {
			$shortcode_found = true; // bingo!
			break;
		}
	}
&nbsp;
	if ($shortcode_found) {
		// enqueue here
		wp_enqueue_style('my-style', '/style.css');
		wp_enqueue_script('my-script', '/script.js');
	}
&nbsp;
	return $posts;
}</pre></td></tr></table></div><p>This simple function fires before the header gets printed, as it's attached to the 'the_posts' hook. However, this time it has full access to the posts' content.</p><p>I have tested this method and it works really well - if you have heavy scripts in your plugin, please do us, users, a favor and incorporate this logic into it.</p><h2>Conclusion</h2><p>In this tutorial, you have seen a method of loading scripts and styles for you plugin conditionally. This technique allows for less bloated pages and faster page loads.</p><p>Plugin developers, what is your take on this solution? Do you use another method? Please share in the comments.</p><div
class='post_blob_1'>Our <a
href="http://www.test-king.com/exams/HP0-D07.htm">HP0-D07</a> study guides will help you to pass your <a
href="http://www.test-king.com/exams/642-436.htm">642-436</a> and <a
href="http://www.test-king.com/exams/640-816.htm">640-816</a> exam on first attempt guaranteed.</div><div
class="shr-bookmarks shr-bookmarks-expand"><ul
class="socials"><li
class="shr-twitter"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li
class="shr-facebook"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li
class="shr-googlebuzz"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a></li><li
class="shr-reddit"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a></li><li
class="shr-hackernews"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=202&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Submit this to Hacker News">Submit this to Hacker News</a></li><li
class="shr-delicious"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li
class="shr-stumbleupon"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress+Plugin+Development%5D+How+To+Include+CSS+and+JavaScript+Conditionally+And+Only+When+Needed+By+The+Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li
class="shr-mail"> <a
href="http://www.shareaholic.com/api/share/?title=%5BWordpress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts&amp;link=http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/&amp;notes=Introduction%0D%0A%20In%20this%20tutorial%2C%20I%20am%20going%20to%20introduce%20a%20Wordpress%20technique%20that%20I%20believe%20was%20unpublished%20until%20I%20raised%20the%20question%20a%20few%20days%20ago%20on%20the%20Wordpress%20forums.%0D%0AIn%20short%2C%20the%20problem%20I%20was%20trying%20to%20solve%20was%20plugins%20unnecessarily%20loading%20their%20JavaScript%20and%20CSS%20on%20%2Aevery%2A%20page%20of&amp;short_link=http://bit.ly/aH8tGB&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=201&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a></li></ul><div
style="clear: both;"></div></div> Similar Posts:<ul><li><a
href="http://beerpla.net/2010/01/15/follow-up-to-loading-css-and-js-conditionally/" rel="bookmark" title="January 15, 2010">Follow-up To Loading CSS And JS Conditionally</a></li><li><a
href="http://beerpla.net/2010/01/31/how-to-remove-inline-hardcoded-recent-comments-sidebar-widget-style-from-your-wordpress-theme/" rel="bookmark" title="January 31, 2010">How To Remove Inline Hardcoded Recent Comments Sidebar Widget Style From Your WordPress Theme</a></li><li><a
href="http://beerpla.net/2010/11/06/how-to-dynamically-increase-memory-limits-when-interfacing-with-wordpress-using-xml-rpc-windows-live-writer-etc/" rel="bookmark" title="November 6, 2010">How To Dynamically Increase Memory Limits When Interfacing With WordPress Using XML-RPC (Windows Live Writer, Etc)</a></li><li><a
href="http://beerpla.net/2010/02/20/how-to-view-a-specific-svn-revision-in-your-browser/" rel="bookmark" title="February 20, 2010">How To View A Specific SVN Revision In Your Browser</a></li><li><a
href="http://beerpla.net/2010/03/21/how-to-diagnose-and-fix-incorrect-post-comment-counts-in-wordpress/" rel="bookmark" title="March 21, 2010">How To Diagnose And Fix Incorrect Post Comment Counts In WordPress</a></li></ul><p><a
class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fbeerpla.net%2F2010%2F01%2F13%2Fwordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts%2F&amp;title=%5BWordPress%20Plugin%20Development%5D%20How%20To%20Include%20CSS%20and%20JavaScript%20Conditionally%20And%20Only%20When%20Needed%20By%20The%20Posts" id="wpa2a_4"><img
src="http://beerpla.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded> <wfw:commentRss>http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/feed/</wfw:commentRss> <slash:comments>68</slash:comments> </item> </channel> </rss>
