Der Seiteninhalt für benutzerdefinierte Hintergründe wird in erstellt wp-admin/custom-background.php
. Es ist keine Aktion verfügbar, bei der die Felder gedruckt werden.
Um neue Felder hinzuzufügen , müssen wir JavaScript in die Seitenfußzeile drucken. Die Aktion ist 'admin_footer-appearance_page_custom-background'
.
Um diese Feldwerte zu speichern , müssen wir uns einhaken 'load-appearance_page_custom-background'
.
Im folgenden Beispiel wird eine neue Option für background-origin
- nützlich hinzugefügt, wenn Sie body
in Ihrem Stylesheet einen Rahmen festgelegt haben.
add_action(
'load-appearance_page_custom-background',
array ( 'T5_Background_Origin', 'get_instance' )
);
/**
* Add a new row to the background options table for 'background-origin'.
*
* @author Thomas Scholz http://toscho.de
* @version 2012.09.10
*/
class T5_Background_Origin
{
/**
* Main instance.
* @type object|NULL
*/
protected static $instance = NULL;
/**
* The name for the option. Will be saved as theme option.
*
* @link http://www.w3.org/TR/css3-background/#the-background-origin
* @type string
*/
protected $option = 'background_origin';
/**
* Label on the left side of our new option.
*
* @type string
*/
protected $table_header = 'Background Origin';
/**
* Return an instance.
*
* @wp-hook load-appearance_page_custom-background
* @return object
*/
public static function get_instance()
{
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
/**
* Save our option and register the form.
*
* @wp-hook load-appearance_page_custom-background
*/
public function __construct()
{
add_action(
'admin_footer-appearance_page_custom-background',
array ( $this, 'form' )
);
if ( empty ( $_POST[ $this->option ] ) )
{
return;
}
check_admin_referer( $this->option, "_t5nonce-$this->option" );
set_theme_mod( $this->option, $_POST[ $this->option ] );
}
/**
* Create the form elements.
*
* @wp-hook admin_footer-appearance_page_custom-background
* @return void
*/
public function form()
{
$nonce = wp_nonce_field(
$this->option,
"_t5nonce-$this->option",
TRUE, // check referer
FALSE // do not echo
);
$html = $nonce . $this->get_radio_fields();
$this->print_script( $html );
}
/**
* Create the jQuery function that inserts our form fields.
*
* @param string $html Radio buttons
* @return void
*/
protected function print_script( $html )
{
$row = "'<tr><th>$this->table_header</th><td>$html</td></tr>'";
?>
<script>jQuery( function <?php echo $this->option; ?>($) {
$('.form-table:last').append(<?php echo $row; ?>);
});</script>
<?php
}
/**
* Helper for form(). Create radio input fields
*
* @return string
*/
protected function get_radio_fields()
{
$value = get_theme_mod( $this->option, 'padding-box' );
$radios = array ( 'padding-box', 'border-box', 'content-box' );
$html = "<p>";
foreach ( $radios as $radio )
{
$html .= sprintf(
' <input type="radio" name="%1$s" value="%2$s" id="%3$s"%4$s>'
. ' <label for="%3$s">%2$s</label> ',
$this->option,
$radio,
"$this->option-$radio",
// returns ' as value delimiters and has to be escaped
addslashes( checked( $value, $radio, FALSE ) )
);
}
return "$html</p>";
}
}
Ich fand die Antwort von @toscho sehr nützlich, aber da ich mehr als eine Option zum Hinzufügen hatte, habe ich den Code ein wenig geändert, sodass ich nur eine einfache erweiterte Klasse mit einigen Optionen erstellen muss.
Ich fand es auch unpraktisch, die Optionen einfach am Ende der Liste hinzuzufügen, daher habe ich ein 'Position'-Argument hinzugefügt, mit dem Sie eine dieser Optionen auswählen können -
'first'
- Vor der ersten Einstellung (aktuell Position)'last'
- Nach der letzten Einstellung (aktuelle Hintergrundfarbe)Integer position
- Die Zeilennummer, vor der die Einstellung eingefügt werden soll (muss eine Ganzzahl sein).Hier ist der Code -
quelle