<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Garamond;
        panose-1:2 2 4 4 3 3 1 1 8 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:881476035;
        mso-list-type:hybrid;
        mso-list-template-ids:-1130605498 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:939415497;
        mso-list-template-ids:-44671610;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1695620089;
        mso-list-template-ids:-1764833786;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hey Chip,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I just took the time to read your tutorial. (Yes I tweeted about it without reading)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This was one piece on enlightenment, especially the settings sections part, which I didn&#8217;t know they work like hooks.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>If anyone complains about the length of the article they&#8217;re lazy. If you&#8217;re interested you can fly through it.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Just a few minor observations:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo3'><![if !supportLists]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>register_setting( 'theme_oenology_options', 'theme_oenology_options', 'oenology_options_validate' );<o:p></o:p></span></p><p class=MsoListParagraph><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This needs to be hooked to admin_init or it will return a &#8220;Call to undefined function&#8221; error. I would also put it somewhere at the beginning, where it makes more sense, since the whole article revolves around this call. You&#8217;re putting it on page 4, after you defined all the default options, settings sections and some settings page options.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo3'><![if !supportLists]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>You said the argument in settings_fields must be the same as the option defined in register_setting(). It must actually be the same as the defined options group (you did call it $options_group). I would stress this however, since if they&#8217;re not the same it returns an &#8220;Options page not found&#8221; error and many grasp at it without knowing where this error came from.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo3'><![if !supportLists]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Your article pwnz<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Daniel<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> theme-reviewers-bounces@lists.wordpress.org [mailto:theme-reviewers-bounces@lists.wordpress.org] <b>On Behalf Of </b>Rahul Bansal<br><b>Sent:</b> Friday, February 18, 2011 3:34 PM<br><b>To:</b> Chip Bennett<br><b>Cc:</b> theme-reviewers@lists.wordpress.org<br><b>Subject:</b> Re: [theme-reviewers] Tutorial: Incorporating the Settings API in WordPress Themes<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><p class=MsoNormal><span class=apple-style-span><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Heading anchors, if it would be helpful for linking?</span></span><o:p></o:p></p></blockquote><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>That will be equally helpful!<o:p></o:p></p></div><div><p class=MsoNormal>You can use any &quot;table of content&quot; plugin to automate it.<o:p></o:p></p></div><div><p class=MsoNormal>There are many plugins, which parse h2/h3 tags to generate that.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>We provide file-upload for favicon &amp; logo as of now.<o:p></o:p></p></div><div><p class=MsoNormal>In a current theme (underdev) we used register settings for it but quality of our code is yet to be &quot;certified&quot; from theme review team!<o:p></o:p></p></div><div><p class=MsoNormal>So we have decided to wait to publish articles about our methods till our next theme goes live here. ;-)<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>--<br>Rahul Bansal | Founder &amp; CEO | rtCamp Solutions Pvt. Ltd.<br>Skype: rahul286 | Twitter: @rahul286 | Web: <a href="http://rtcamp.com/" target="_blank">http://rtcamp.com/</a><br><br><br><o:p></o:p></p><div><p class=MsoNormal>On Fri, Feb 18, 2011 at 6:56 PM, Chip Bennett &lt;<a href="mailto:chip@chipbennett.net">chip@chipbennett.net</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>I'll probably cross the &quot;file upload&quot; issue down the road - though, likely, *far* down the road (as my Theme currently has no need for any user-uploaded files). Maybe I'll add a &quot;custom favicon&quot; option (though my personal preference is for favicons to be Plugin territory, and not tied to a particular Theme).<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I love Justin Tadlock's Series Plugin; I've made some use of it in the past. The problem here was that I found it difficult to break the content up logically in a way that would facilitate separate Posts. So, I went with simple pagination instead.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Now that it's done, perhaps I can go back and do some editorial work, and at least provide some Heading anchors, if it would be helpful for linking?<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>And, I'm happy to take the time for something like this. I like to write posts like these, especially when I can document something as I'm learning how to do it - both for my own memory, and to pass on anything useful that I may have learned. It probably cost me the equivalent time away from performing some Theme reviews, but part of the mission of the Theme Review Team is also to provide an educational resource for Theme developers. So hopefully the review queue will forgive me. :)<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='color:#888888'>Chip</span><o:p></o:p></p><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On Fri, Feb 18, 2011 at 7:16 AM, Rahul Bansal &lt;<a href="mailto:rahul.bansal@rtcamp.com" target="_blank">rahul.bansal@rtcamp.com</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>Length is worth the info. Didn't get time to read in detail till now.<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>For ease of&nbsp;navigation, you may break articles into entirely different pages/posts and bind them using a series plugin.<o:p></o:p></p></div><div><p class=MsoNormal>Other reason for this suggestion is that article in series will have their own URLs that will have advantages like:<o:p></o:p></p></div><div><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo1'>We can refer people to particular subtopic by sharing a unique post article<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo1'>permalinks will contain keywords like &quot;Register Settings and Define Form Sections/Fields&quot; etc. This wil give better search engine visibility. I am less concerned about traffic gain that wil result, but my intention is to indirectly help Google give better article so developers can avoid following &quot;wrong&quot; article.<o:p></o:p></li></ul><div><p class=MsoNormal>Series creation may require 1-2 hours of extra time from you!<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>On sidenote, after taking quick overview, I felt that the article missed information about &quot;file upload&quot; box. (I searched &quot;upload&quot; keyword on &quot;all&quot; article page to crosscheck&quot;. Many times I find developers&nbsp;complaining&nbsp;register_settings has issues with file-uploads.&nbsp;<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Thanks again for taking so much time to write something like this. :-)<o:p></o:p></p></div><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><br clear=all>--<br>Rahul Bansal | Founder &amp; CEO | rtCamp Solutions Pvt. Ltd.<br>Skype: rahul286 | Twitter: @rahul286 | Web: <a href="http://rtcamp.com/" target="_blank">http://rtcamp.com/</a><br><br><br><o:p></o:p></p></div><div><div><div><p class=MsoNormal>On Fri, Feb 18, 2011 at 6:27 PM, Chip Bennett &lt;<a href="mailto:chip@chipbennett.net" target="_blank">chip@chipbennett.net</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>Thanks!<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I was worried about the length of the article, but it didn't seem to make sense to split it into multiple posts.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Do you think it would be useful to do a more slimmed-down follow-up post, that leaves out some of the advanced topics, like Settings page tabs, contextual help, etc.?<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='color:#888888'>Chip</span><o:p></o:p></p><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On Fri, Feb 18, 2011 at 6:51 AM, Rahul Bansal &lt;<a href="mailto:rahul.bansal@rtcamp.com" target="_blank">rahul.bansal@rtcamp.com</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>Great article... :-)<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>Added to -&nbsp;<a href="http://make.wordpress.org/themes/about/resources/" target="_blank">http://make.wordpress.org/themes/about/resources/</a> (comments section)<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Timing is good as well! 10 pages gives a lot to explore on weekend! ;-)<o:p></o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'><br clear=all>--<br>Rahul Bansal | Founder &amp; CEO | rtCamp Solutions Pvt. Ltd.<br>Skype: rahul286 | Twitter: @rahul286 | Web: <a href="http://rtcamp.com/" target="_blank">http://rtcamp.com/</a><br><br><br><o:p></o:p></p><div><div><div><p class=MsoNormal>On Fri, Feb 18, 2011 at 9:11 AM, Chip Bennett &lt;<a href="mailto:chip@chipbennett.net" target="_blank">chip@chipbennett.net</a>&gt; wrote:<o:p></o:p></p></div></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><div><p class=MsoNormal>All,<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I have just published a tutorial: <a href="http://bit.ly/hHjo6n" target="_blank">Incorporating the Settings API in WordPress Themes</a>:<o:p></o:p></p></div><blockquote style='margin-left:30.0pt;margin-right:0in'><div><p style='margin:0in;margin-bottom:.0001pt;line-height:17.25pt;border-style:initial;border-color:initial'><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>While others such as&nbsp;<a href="http://ottopress.com/2009/wordpress-settings-api-tutorial/" target="_blank"><b><span style='color:#5588AA;text-decoration:none'>Otto</span></b></a>&nbsp;and&nbsp;<a href="http://planetozh.com/blog/2009/05/handling-plugins-options-in-wordpress-28-with-register_setting/" target="_blank"><b><span style='color:#5588AA;text-decoration:none'>Ozh</span></b></a>&nbsp;have done yeomen's work in explaining how to implement the Settings API, I have not yet come across anything that really put everything together, and explained the process and implementation from beginning to end, in a way that even the less-experienced Theme developers (like me) could easily understand.<o:p></o:p></span></p><p style='mso-margin-top-alt:24.0pt;margin-right:0in;margin-bottom:0in;margin-left:0in;margin-bottom:.0001pt;line-height:17.25pt;border-style:initial;border-color:initial'><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>This tutorial will attempt to fill that gap, by providing examples of current (as of the pending release of WordPress 3.1) best-practice implementation, not merely of the Settings API, but of Theme Options implementation as a whole, including:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Registering options in the database as a single options array<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Initializing default options<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Creating a single Theme Settings page (with tabs)<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Defining settings page sections and fields<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Validating and white-listing user-input form data<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Adding Settings Page contextual help<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Enqueueing custom CSS for the Settings page<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Implementing settings in the Theme template files<o:p></o:p></span></p><p class=MsoNormal style='margin-left:26.25pt;text-indent:-.25in;line-height:13.2pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:#555555'><span style='mso-list:Ignore'>&middot;<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:11.5pt;font-family:"Garamond","serif";color:#555555'>Enqueueing front-end CSS<o:p></o:p></span></p></div></blockquote><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Please give it a read; I hope it is helpful. Also, any feedback, comments, corrections, criticism, etc. is welcome, so please comment!<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='color:#888888'>Chip<o:p></o:p></span></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div><p class=MsoNormal style='margin-bottom:12.0pt'>_______________________________________________<br>theme-reviewers mailing list<br><a href="mailto:theme-reviewers@lists.wordpress.org" target="_blank">theme-reviewers@lists.wordpress.org</a><br><a href="http://lists.wordpress.org/mailman/listinfo/theme-reviewers" target="_blank">http://lists.wordpress.org/mailman/listinfo/theme-reviewers</a><o:p></o:p></p></blockquote></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>_______________________________________________<br>theme-reviewers mailing list<br><a href="mailto:theme-reviewers@lists.wordpress.org" target="_blank">theme-reviewers@lists.wordpress.org</a><br><a href="http://lists.wordpress.org/mailman/listinfo/theme-reviewers" target="_blank">http://lists.wordpress.org/mailman/listinfo/theme-reviewers</a><o:p></o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>