Hallo,
ich habe ein Problem mit der Validierung der Eingaben von einer Options Page mit der Settings API.
Ich will die Eingaben zweier text-intput Felder als key-value Paare in der Tabelle Options speichern. Dazu habe ich 2 Settings Fields hinzugefügt, und schreibe diese Eingaben in der Validierungsfunktion in der gewünschten Form in ein Array.
Hier mal der Code der Validierungsfunktion:
function mu_file_types_validate($input){
$options = get_option('mu_file_types') ;
$key = trim($input['abbreviation']) ;
$options[$key] = trim($input['mime']) ;
return $options ;
}
Das ganze klappt ganz nett, solange schon was in dem Array steht, also schon eine Option gespeichert ist. Ist das nicht der Fall, und es existiert kein Eintrag, so gibts Probleme.
Wenn ich dann z.B- das Paar a , b eingebe, erhalte ich eine Fehlermeldung:
Notice: Undefined index: abbreviation in C:\Program Files\xampp\xampp\htdocs\DorfNeu\wp-content\plugins\myUploads\adminMenue.php on line 97
Notice: Undefined index: mime in C:\Program Files\xampp\xampp\htdocs\DorfNeu\wp-content\plugins\myUploads\adminMenue.php on line 98
Das sind die Indizes des Arrays 'input' in der Fkt [FONT=Times New Roman, serif][size=12]'[/SIZE][/FONT][COLOR=#000000][FONT=Times New Roman, serif][size=12]mu_file_types_validate', das dieser als Parameter[/SIZE][/FONT][/COLOR] übergeben wird.
Wenn ich die Seite nun neu lade, so ist in der Tabelle Options ein neues Array (mu_file_types) vorhanden, allerdings mit 2 Einträgen der Form: ("" => "" , "a" => "b" ). Als erstes ist immer ein leerer Eintrag vorhanden. Nun kann man problemlos weitere Paare eintragen, diese werden alle richtig gespeichert.
So wie ich das verstanden habe, erhält der Parameter 'input' den Inhalt aus der Post-Variablen, und diese ist nicht abhängig von dem Inhalt der Tabelle Options. Daher weiß ich auch nicht, wie ich hier ansetzen soll, um den Fehler zu beseitigen.
Den gesammten Code für die Options Page gebe ich hier noch mit an:
<?php
add_action('admin_menu', 'myUploads_menu' ) ; // Bindet das Menue ein
add_action('admin_init', 'mu_init_settings'); // Initialisiert die Settings
/*
* Im Backend soll eine Liste aller gespeicherten Dateitypen angezeigt werden, mit der Möglichkeit,
* einen Typ für den Upload zuzulassen, bzw ihn zu sperren.
* Des weiteren soll die Möglichkeit bestehen, weitere Dateitypen, d.h. Mime Typ und Dateierweiterung
* anzugeben.
* Die Dateitypen werde in einem Array file_types nach dem Schema (Dateierweiterung => Mime-Type)
* in der Tabelle Options gespeichert.
* Ein weiteres array permitted_mime_types speichert die Dateierweiterungen der Zugelassenen Dateitypen.
*/
function myUploads_menu(){
/*
* Die wrapper-fkt 'add_options_page' fügt eine neue Admin-Seite Einstellungen hinzu, die über
* das Einstellungen->'2.Parameter' (hier myUploads) angesteuert werden kann
*/
add_options_page('myUploads Einstellungen' , 'myUploads' , 'manage_options',
'myUploadOptions' , 'mu_settngs_menu') ;
}
/**
* Erzeugt das Options-Menü im Backend
*/
function mu_settngs_menu(){
if(!current_user_can('manage_options')){
wp_die( __('You do not have the sufficient permissons to access this page.')) ;
}?>
<div class="wrap"><!-- Inhalt der Klasse wrap wird mit dem Wordpress Look and Feel ausgestattet -->
<h2>Einstellungen des Plugins myUploads</h2>
<form action="options.php" method="post" >
<?php settings_fields('mu_file_types') ?>
<?php do_settings_sections('myUploadOptions')?>
<input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes') ?>" />
</form>
</div><!-- end class="wrap" -->
<?php
}
/**
* registriert die Settings?
* Die Fkt sird bei admin_init ausgeführt, sie legt die Settings für das Plugin fest.
*
*/
function mu_init_settings() {
//register our settings
register_setting( 'mu_file_types' , 'mu_file_types' , 'mu_file_types_validate' );
add_settings_section('file_types' , 'The File Types' , 'file_type_section_callback' ,'myUploadOptions' ) ;
add_settings_field('id_abbreviation_key' , 'Dateierweiterung' ,
'abbreviation_input_callback' , 'myUploadOptions' , 'file_types') ;
add_settings_field('id_mime_value' , 'Mime Typ' ,
'mime_input_callback','myUploadOptions' , 'file_types') ;
}
/**
* Erzeugt erste Section. registriert von der Fkt add_settings_field in make_settings_clear
*/
function file_type_section_callback(){
?> <p>Mime Typen und deren Dateierweiterungen</p><?php
}
/**
* Erzeugt das erste settings field.
* registriert von add_settings_field in der fkt make_settings_clear
*/
function abbreviation_input_callback(){
$options = get_option('mu_file_types') ;
if($options){
foreach ($options as $key => $value){
?><p>Dateierweiterung : <?php echo $key ; ?> Mime Typ : <?php echo $value ; ?></p>
<?php
}
}
?>
<input id="id_abbreviation_key" name="mu_file_types[abbreviation]"
size="40" type="text" value="Schlüssel hier eintragen" />
<?php
}
/**
* Erzeugt eine Eingabemaske zur speicherung von Dateierweiterung und Mime Typ in einem Array
* in der Form (Dateierweiterung => Mime )
* Dateierweiterung und Mime Typ übergeben
*/
function mime_input_callback(){
$options = get_option('mu_file_types') ;
?>
<input id="id_mime_value" name="mu_file_types[mime]"
size="40" type="text" value="<?php //echo $options['second_option'] ?>" />
<?php
}
/**
* kann bei register_settings mit aufgerufen werden
* @param $input
*/
function mu_file_types_validate($input){
$options = get_option('mu_file_types') ;
$key = trim($input['abbreviation']) ;
$options[$key] = trim($input['mime']) ;
return $options ;
}
Alles anzeigen
LG
Pakla