On Fri, Aug 27, 2010 at 2:45 PM, Chip Bennett <span dir="ltr">&lt;<a href="mailto:chip@chipbennett.net">chip@chipbennett.net</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="gmail_quote"><div class="im">On Fri, Aug 27, 2010 at 1:41 PM, Edward Caissie <span dir="ltr">&lt;<a href="mailto:edward.caissie@gmail.com" target="_blank">edward.caissie@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


I&#39;m not seeing a great deal of difference in their functionality from the codex pages.<br><br>The major differences I am seeing in core are:<br><ul><li>site_url() returns get_option ( &#39;siteurl&#39; ) vs. home_url returns get_option( &#39;home&#39; )</li>



<li>site_url() does additonal $scheme checks</li></ul></blockquote></div></div></blockquote><div>Allow me to summarize everything, as well as what was added in 3.0.</div><div><br></div><div>In a nutshell, home_url() is to get_bloginfo(&#39;url&#39;) or get_option(&#39;home&#39;), as site_url() is to get_option(&#39;site_url&#39;) or get_bloginfo(&#39;wpurl&#39;);</div>

<div><br></div><div>The difference between the _url() functions and get_option/get_bloginfo is that the _url() functions handle schemes, specifically, HTTPS versus HTTP. Thus these are extremely important for sites that want to force SSL on the frontend, admin, or login.</div>

<div><br></div><div>The difference between site and home is the following. Otto is correct that they have to do with the two address fields on the General Settings page. Specifically, SITE is always where the WP files are actually located, and HOME *may* be /blog. In 99% of cases, a theme will want to use home_url().</div>

<div><br></div><div>home_url() is new in 3.0, but site_url(), admin_url(), content_url(), plugins_url(), and includes_url() were all added in 2.6. [1]</div><div><br></div><div>Additionally, we added 6 others that are for multisite installations. Three are network_admin_url(), _site_, and _home_... These are for the root site&#39;s admin, site, and home, respectively. And then get_admin_url(), _site_, and _home_, which are designed to be able to fetch the admin, site, and home of any site (it takes a blog_id parameter).</div>

<div><br></div><div>Thus it is important to know that get_site_url() and site_url() are *not* complimentary the way most get_ and non-get_ functions are (return versus echo).</div><div><br></div><div>[1] <a href="http://codex.wordpress.org/Determining_Plugin_and_Content_Directories">http://codex.wordpress.org/Determining_Plugin_and_Content_Directories</a></div>

<div><br></div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

I would prefer to go with &quot;Theme authors may also use home_url()&quot; ... at least until we are given a clear direction from WPORG.</blockquote><div><br></div><div>Suggested direction: I would use &quot;recommended,&quot; primarily because they are easier to use. Instead of doing `get_bloginfo() . &#39;/blah/&#39;`, you can do home_url(&#39;/blah&#39;). That said, there is *zero* functional difference between the url and wpurl arguments for get_bloginfo() with their _url() counterparts (home and site, respectively), as bloginfo() simply calls home_url() or site_url(). Thus, the HTTPS scheme is covered.</div>

<div><br></div><div>However, get_option(&#39;home&#39;) or get_option(&#39;url&#39;) in a theme should throw a flag. Likewise, chances are in a theme, site_url() should actually be home_url() in most cases.</div><div><br>

</div><div>Questions welcome.</div><div><br></div><div>Nacin</div></div>