I am helping, off an on, a friend with a project that is powered by WordPress. One of his latest hijinks, involved named anchors.
Basically he was having trouble using them across varying sections and templates. He was creating absolute URI’s and tacking on the anchor pointer, lets say #top on that generated URI. The problem of course is that WP dynamically generates its content, which gives you all kinds of URI’s.
So I sent him a recommendation, to just use relative anchoring, meaning just specifying #top instead of:
http://my.greatsite.com/index.php?p=3#top.
Doing this would allow him to overcome problems like when you have multiple paged posts, if you use <? get_permalink(); ?>#top to produce the URI, then when you are on page two, and click the #top link it would take you from
/index.php?p=3&page=2#topto/index.php?p=3#top
since you created your named anchor link with get_permalink, which doesn’t care about page=2.
When I received his response I was enlightened to what the real problem was. He was using Base HREF’s and more importantly, they were being used incorrectly.
Now this is not a dig at my friend, he is a bright and talented designer. 98% of people who use Base HREF’s use them incorrectly. Most of the time when you see them used, they are pointing to the site root, or the top level of a given site. So on every page of my site I would have this in the <head> portion of my HTML:
<base href="http://chrisjdavis.org">
The problem of course is that this is incorrect. From the W3C definition:
The BASE element allows authors to specify a document’s base URI explicitly. When present, the BASE element must appear in the HEAD section of an HTML document, before any element that refers to an external source. The path information specified by the BASE element only affects URIs in the document where the element appears.
Basically this is saying that the Base HREF is the URI of the document you are currently on, not the entire site. The Base HREF is how you resolve relative URI’s to the current page (document) you are on.
Now I am of the mind that you shouldn’t use this on a site whose content is generated dynamically, but that is just me. Oh and if you leave out the Base HREF modern browsers will take the page you are on and make it the base, by default.
I am offended… really. Well thanks to the Theme System built into WP, this can be accomplished by using some of the built in functions like get_permalink(), bloginfo('siteurl') , the_category(' '), some elbow grease, and inventive use of header.php.
I will leave it to you to figure out how to make this all work, since you know… I am against it and all. Don’t want to help the enemy too much.
Oleg
November 28, 2011, Surf on over
Tag base dows not work for me when image file is located in subfolders
E Walsh
December 22, 2011, Surf on over
Firstly, some things aren’t always used as intended. AJAX is probably the best example of this, and BASE href is another.
Secondly, your search box is broken.