WordPress Settings: Dynamic Fields
When you have a lot of settings fields with the same type, it is often annoying to write a display function for every field.
There is a simple and better way to do this.
Example:
You want to make a checkbox for every menu in from WordPress administration.
First you get the menus:
$menus = $GLOBALS[‘menu’];
Now we create a new settings section:
add_settings_section(“menu-test-section-“, “”, “”, “menu-test-options”);
Now traverse through every menu entry, create a settings field and register this field.
foreach ($menus as $menukey => $menuvalue) { if (!empty($menuvalue[0])) { // Not a separator? $label = $menuvalue[0]; // Title of menu entry $fieldname = "menu-test-field-".$menukey; $id = $fieldname . "-id"; // Now comes the funny part // Anonymous display function $callback = function() use ($id, $label, $fieldname) { ?> <label for="<?php echo $id; ?>"><?php echo $label; ?></label> <input id="<?php echo $id; ?>" name="<?php echo $fieldname; ?>" type="checkbox" value="1" <?php checked(1, get_option($fieldname),true);?> /> }; add_settings_field($fieldname, "", $callback, "menu-test-options", "menu-test-section"); register_setting("menu-test-section", $fieldname); } }
That’s all!
Keine Kommentare bisher