Cristián: I still don't understand how the JS conflicts work... If the library is the same in both plugins, why is there a conflict? Same var names?
Jason Caldwell: Well, I call it a conflict. Sometimes it's a conflict in jQuery because of a bad plugin, which attempts to load jQuery on it's own, instead of doing it the WP way. Or sometimes, it just a bad plugin that causes a JavaScript error, which may result in all JavaScript failing ( the nature of JavaScript ). Not really a "conflict" in that case, really an error due to a bad plugin/theme.
Jason Caldwell: I've also see some conflicts between frameworks. That's rare, but there are some plugins that use the ProtoType framework, and combined with another framework like MooTools, there is a possibility for a conflict to arise. Rare though, and it's usually attributed to the way their loaded ( i.e. by a bad plugin/theme ).
Cristián: Does WP load JQuery already? If so, why do plugins load it too?
Jason Caldwell: Yea, WP already loads it. But some plugin authors don't know that, or they just hard code it into their plugin not realizing that. Other times they'll try to include a dependency on jQuery, but they name it wrong, and WordPress gets confused.
Cristián: Does s2Member load it again or uses WP's?
Jason Caldwell: Hmm, not really, because in the Dashboard, it's already loaded by WordPress. s2Member enques scripts that is uses, which rely on jQuery being present. In the call to wp_enqueue_script(), s2Member will list jQuery as a dependency, which forces WP to load it, though it's already loaded in the Dashboard anyway. That's the proper way to handle it.
On the front-end of a site, s2Member will load jQuery if it's not already loaded, but again, using the same technique. A call to wp_enqueue_script() with a dependency on jQuery forces WP to load jQuery. If 10 plugins all do it this way ( i.e. the right way ), WordPress loads jQuery in the proper order and only one time.
Cristián: Ah, got it. I understand WP has a QC team, don't they check this?
Jason Caldwell: Not in my experience. They look mostly for security issues and really bad code. They usually don't catch minute details like this.
Cristián: I see. Well, they do look at how the db is used, iirc.
Cristián: I see, but these details do cause trouble for the users. Maybe it'd be good to write an article about JS conflicts as you explained above and post it in the forums, and then show it to the QC guys for consideration to include in their quality checklist.
Jason Caldwell: Yea, that's a good idea. On the WP side though, they're aware of this problem, and that's why they created the wp_enqueue_script() wp_enqueue_style() functions. Although, I wish this were more prominent in this article:
http://codex.wordpress.org/Writing_a_Pl ... uggestionsIt is mentioned, but it's all the way at the bottom:
Try not to echo <script> and <style> tags directly - instead use the recommended wp_enqueue_style() and wp_enqueue_script() functions. They help eliminate including duplicate scripts and styles as well as introduce dependency support. See posts by the following people for more info: Ozh Richard, Artem Russakovskii, and Vladimir Prelovac.