Today I add an options panel to the Sitemap plugin. Before start coding I have to define what I want this panel to do and the data to collect.

  • the max number of urls to be added to the sitemap, blank value will mean “all”
  • a checkbox to enable the integration with other plugins (features I’ll explain on next lessons)

On the WordPress codex there are example on how to write an option panel. I don’t follow them, usually, seen that my panels are too much complex.

To proceed in a clear way, I create an “options.php” which will be a file containing the HTML and logic of the control panel. Then I register a new menu void in WordPress to make this panel accessible. The call to register a new menu voice will be added to “plugin.php” and is:

add_action('admin_menu', 'sitemap_admin_menu');
function sitemap_admin_menu()
{
    add_options_page('Sitemap', 'Sitemap', 'manage_options', 'sitemap/options.php');
}

note that always I prefix function names with “sitemap_” as explained in the first lessons to avoid name conflicts.

The “options.php” file is too long to be inserted here, you can find it on the plugin package. Just a foundamental note: each options, at HTML level, is named “options[nnn]”. This convention produces an associative array when the options are extracted and are saved under a single name within the options table of WordPress. WordPress manage tha saving of an array, no problem. Tha option name will be “sitemap”.

To complete the lesson, I modify further “plugin.php” to manage the max number of url to insert. I do it directly on the query to save time and memory.

$query = "select ID as id, post_modified as lastmod from " . $wpdb->prefix .
"posts where post_type in ('post', 'page') and
post_status='publish' order by post_modified desc";

if ($options['max']) $query .= ' limit ' . $options['max'];

All lessons can be found under “sitemap tutorial

My excuses for my bad english but it's the only way I have to communicate with you. Would you suggest a correction? Leave a comment, thank you!

1 Comment

khaled · July 21, 2009 at 12:07 pm

great.

Leave a Reply