November 28, 2008

I want to introduce you to a new function in 2.7 that might help to reduce the number of admin pages in your WordPress installation. The function allows plugin authors to extend the existing admin pages instead of creating new ones.

Here’s a quick example:

[php]
add_action('admin_init', 'add_my_settings_field');

function add_my_settings_field(){

// The fields are:
//the id the form field will use
//name to display on the page
//callback function
//the name of the page
//the section of the page to add the field to
add_settings_field('my_field_id' , 'My Field Caption' ,
'my_field_callback' , 'writing' , 'default');

//register the setting to make sure it gets checked
register_setting('writing','my_field_id');
}

function my_field_callback(){

//echo out the text field, drop down, or other type of field.
echo '
value="'.attribute_escape(get_option('my_field_id')).'" class="regular-text code" />';

}

In WordPress 2.7 admin pages are made of pages, sections and fields. In the above example I have added a new field to the writing page (Settings > Writing) in the default section.

This not only creates the table rows and table header for the form field, it also saves the value for you. The above code is everything you need to add the new question.

The value can be accessed again using get_option(‘my_field_id’).

You could just as easily add it to the remote_publishing section, by changing the last attribute in the add_settings_field function in the example to ‘remote_publishing’.

If you take a look at the options-writing.php page in wp-admin you will see that beneath each section there is a function, do_settings_fields, that lists the page and the section in its arguments; i.e. do_settings_fields(‘writing’, ‘remote_publishing’)

These tell you the settings you need to add fields in that part of the page.

I think this is a very important step in helping to reduce the clutter in WordPress, no longer will a new admin page be needed for a single setting if it could sit in an existing page.



Wordpress title showing space?
no comment on page 1371

Wordpress fun?
one comment on page 1376

Live blogging plugin?
4 comments on page 1258

Wordpress 3 admin speed up?
4 comments on page 1321

Framework photoshop?
3 comments on page 296

Fun wp plugins?
one comment on page 1376

Habari vs wordpress?
12 comments on page 440

Wp tags vs categories?
12 comments on page 7

Wordpress rss seo?
one comment on page 1361

Photo albums html5?
6 comments on page 1305

Wordpress chat?
no comment on page 1308

Wordpress exif data?
12 comments on page 230

Css sidear tab?
2 comments on page 336

Wordpress theme html5 blueprint?
6 comments on page 1305

Wordpress shortcode in plugin?
no comment on page 236

Html 50 photo album?
6 comments on page 1305

Get the post attachement?
24 comments on page 1065

Wordpress plugin development 30?
one comment on page 1373

Wordpress plugin development 30?
one comment on page 1373

Disqus formatting?
7 comments on page 1175

Html5 photoalbum?
6 comments on page 1305

Html5 photoalbum?
6 comments on page 1305

Wordpress fun?
one comment on page 1376

Fun wordpress plugins?
one comment on page 1376

Url shortener ideas?
4 comments on page 1190

Url shortener ideas?
4 comments on page 1190

Html 5 photo gallery?
6 comments on page 1305

Multiple post navigation?
no comment on page 1147

Html5 photo galleries?
6 comments on page 1305

Adding images to a wordpress 3 post?
24 comments on page 1065

Html5 photo gallery code?
6 comments on page 1305

Wordpress multiple blog master?
one comment on page 1376

Wordpress 3 tableprefix?
one comment on page 1376

Wordpress 3 tableprefix?
2 comments on page 1374

Using wordpress as a framework?
2 comments on page 335

Single post image size?
24 comments on page 1065

Get featured image src wordpress?
24 comments on page 1065

Disqus wordpress mu?
7 comments on page 1175

Image gallery html 5?
6 comments on page 1305

Wordpress theimage?
24 comments on page 1065

Wpgetattachmentimagesrc size?
24 comments on page 1065
  every 1731s, 1s ago, in 0.02s.
 __
(__)
   `
 ala_747

Thank you very much for your answer :)

I've tried to do this but $this->adb value is always returning 'd' (the last item of my $as array).

I think I'll need to do it the old way (a new admin page) :(

Again, thanks for your time!

 __
(__)
   `
 Andrew Rickmann

What I usually do is to make sure the plugin and all its functions are contained within a class and then assigned the values to the class so the callback function can access them by using $this->myVar i.e.

class myPlugin
{

private $myVar = 10;

function myCallBack(){

$newVar = $this->myVar;

}

}

 __
(__)
   `
 ala_747

That's awesome! Thank you for sharing!!

But I'm trying to figure out how to pass an argument to the callback function. Actually, I don't know if it could be done :(

Eg.


$as = array('A', 'B', 'C', 'D');
$adb = null;

function my_new_settings(){
global $as;
foreach($as as $a):

$adb = sanitize_title($a);

register_setting('media',"{$adb}_1");
register_setting('media',"{$adb}_2");

add_settings_field("{$adb}" , "{$a} setting:" ,
'my_new_callback' , 'media' , 'default');

endforeach;
}

function my_new_callback(){
global $adb;

echo "<label for="{$adb}_1">Setting 1</label>
<input name="{$adb}_1" id="{$adb}_1" value="".attribute_escape(get_option("{$adb}_1"))."" class="small-text" type="text">
<label for="{$adb}_2">Setting 2</label>
<input name="{$adb}_2" id="{$adb}_2" value="".attribute_escape(get_option("{$adb}_2"))."" class="small-text" type="text">
";
}

add_action('admin_init', 'my_new_settings');

Maybe I'm missing something? Thanks in advance!


0.01s