Yesterday, I wrote a post about using Alex King’s WordPress Mobile Edition plugin (wp-mobile) to generate WordPress content formatted for the mobile web. wp-mobile makes the code generation seamless; however I did have a few issues when I came to validating the output at the ready.mobi site. After a few hours (remember, I’m an infrastructure bod and my coding abilities are best described as weak) I managed to tweak the wp-mobile theme to produce code that validates perfectly.
The changes that I made to the wp-mobile index.php file can be seen at Paul Dixon’s PHP pastebin but are also detailed below:
- Add an XHTML Mobile Profile (XHTML-MP) document type descriptor:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
. Incidentally, I didn’t include an XML declaration (which looks like:<?xml version="1.0" charset="UTF-8" ?>
) as it kept on generating unexpected T_STRING PHP errors and it seems that it is not strictly necessary if the UTF-8 character set is in use:
“An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol.”
- Add some caching controls:
<?php header ("Cache-Control: max-age=10 "); ?>
. 10 seconds is a little on the low side but it can be changed later and it means that the caching is unlikely to affect testing of subsequent changes. - Remove
<meta name="HandheldFriendly" value="true" />:
this code doesn’t appear to do anything and is not valid XHTML-MP –media="handheld"
can be used instead when linking the stylesheet (see below). - Change the stylesheet link method: although
<style type="text/css">@import url("<?php print(get_stylesheet_uri()); ?>"); </style>
should work, I found that the validator was only completely satisfied with the form<link href="<?php print(get_stylesheet_uri()); ?>" rel="stylesheet" type="text/css" media="handheld" />
. - Provide access keys using
accesskey="key"
inside the<a>
tag for each of the main menu items. - Surround
<?php ak_recent_posts(10); ?>
with<ul>
and</ul>
tags – this bug took the most time to track down and was the final change necessary to make the markup validate as XHTML-MP.
I also made some minor changes in order to fit my own page design (adding a legal notice, etc.) but in order to get the elusive 100% in the report for this site, there was one minor tweak required to style.css: removal of the height: 1px;
rule for <hr>
. I understand why it was there but the validator didn’t like it, suggesting that relative units should be used instead (I would argue that 1px is far more logical for a horizontal rule than the use of relative units but this change resulted in another pass on the report).
Right, enough of these mobile diversions – I’d better focus my development efforts on getting the rest of this site to be fully XHTML compliant…