Einstellungs-API – bereinigt URLs, E-Mail-Adressen und Text

Ich frage nach Best Practices für die Erstellung dieses Codes. Zur Zeit habe ich einfache Themenoptionen mit Textfeldern, die die Informationen in meiner Vorlage ausgeben. Ich verwende diesen Code derzeit für die Einstellungen api und Bereinigung des Klartextes. Meine Fragen sind, ein zusätzliches Einstellungsfeld ist ein Website-Feld und auch ein E-Mail-Feld. Ich bin mir nicht sicher, ob ich noch eine ganze Theme-Option, Sektion und Feld erstellen muss, damit ich die registrierten Einstellungen einzeln (und richtig für jeden Typ) oem_theme_profile_options bereinigen kann, oder ob das alles innerhalb derselben oem_theme_profile_options Bereinigung kombiniert werden kann. Ich bin noch nicht der beste PHP-Typ. Wenn ich dies in Bezug auf Best Practice herausfinde, kann das mich für die Zukunft aufklären und nicht dazu führen, dass ich mehrere Optionen in der database erstelle.

 function oem_theme_initialize_profile_options() { if( false == get_option('oem_theme_profile_options')) { add_option('oem_theme_profile_options'); } add_settings_section( 'profile_settings_section', 'Profile Options', 'oem_profile_options_callback', 'oem_theme_profile_options' ); add_settings_field( 'personal_name', 'Name', 'oem_personal_name_callback', 'oem_theme_profile_options', 'profile_settings_section' ); register_setting( 'oem_theme_profile_options', 'oem_theme_profile_options', 'oem_theme_sanitize_profile_options' // Here is where all these options get sanitized the same. ); } // end of oem_theme_initialize_profile_options add_action('admin_init', 'oem_theme_initialize_profile_options'); function oem_profile_options_callback() { echo '

Provide the URL to the profile networks you\'d like to display

'; } // end oem_profile_options_callback function oem_personal_name_callback() { // First, we read the profile options collection $options = get_option('oem_theme_profile_options'); // Next, we need to make sure the elment is defined in the options. If not, we'll set an empty string. $url = ''; if (isset( $options['personal_name'] )) { $url = $options['personal_name']; } // Render the output echo ''; } // end oem_personal_name_callback

Desinfektion von Text

 function oem_theme_sanitize_profile_options($input) { //Define the array for the updated options $output = array(); // Loop through each of the options sanitizing the data foreach ($input as $key => $val) { if( isset($input[$key]) ) { $output[$key] = strip_tags( stripslashes($input[$key])); } // end if } // end foreach return apply_filters( 'oem_theme_sanitize_profile_options', $output, $input ); } // end oem_theme_sanitize_profile_options 

Solutions Collecting From Web of "Einstellungs-API – bereinigt URLs, E-Mail-Adressen und Text"

Anstatt jedesmal add_settings_section () und add_settings_field () zu verwenden, erstellen Sie eine function, die ein Array von Optionen zurückgibt, zum Beispiel:

 function my_theme_options() { $options = array(); $options[] = array( 'id' => 'ID', 'title' => 'Title', 'type' => 'text_field', // use this value to sanitize/validate input 'validate' => 'url' // use this value to validate the text as url // add as much as you need like description, default value ... ); $options[] = array( 'id' => 'ID_2', 'title' => 'Title', 'type' => 'text_field', 'validate' => 'email' // use this value to validate the text as email // add as much as you need like description, default value ... ); // every time you want to add a field you'll use this function an create a new array key $options[] = array(); return $options; 

}

Mit dieser function können wir jedes Feld mit einer foreach-Schleife registrieren, die add_settings_field () verwendet

Mit dieser function können Sie eine Callback-function für register_setting () erstellen und mit switch die Eingabe validieren, zum Beispiel:

 // this should be the callback function of register_setting() (last argument) function validate_settings($input) { $options = my_theme_options(); // we'll set $options variable equal to the array we created in the function before $valid_input = array(); // this will be the array of the validated settings that will be saved to the db, of course using one array for all options. foreach ($options as $option) { switch ( $option['type'] ) { // $option['type'] where type is the key we set before in my_theme_options() case 'text_field': // inside we'll create another switch that will use the validate key we created in my_theme_options() switch( $option['validate'] ) { case 'url': // validate url code break; case 'email': // validate email break; // create a default for regular text fields default: // default validation break; } break; case 'textarea': // your validation code here break; // you get the idea just keep creating cases as much as you need }// end switch }// end foreach return $valid_input; } 

Am Ende jedes Falls, um den Wert in $ valid_input array zu speichern

 $valid_input[$option['id']] = $input[$option['id']] 

Zum Beispiel um die URL zu validieren:

 if ( preg_match('your regex', $input[$option['id']]) ) { $valid_input[$option['id']] = $input[$option['id']]; } 

Sie können auch eine function genau wie die Optionen function erstellen, aber für Abschnitte und erstellen Sie eine foreach-Schleife, die add_settings_section () verwenden wird, erhalten Sie die Idee, dass dies viel einfacher für Sie sein wird, sparen Sie später viel Zeit später um neue Einstellungsfelder und -bereiche hinzuzufügen. Ich hoffe, das hilft 🙂

Ich denke, ich würde Sie zuerst auf den Codex-Abschnitt zur Datenvalidierung verweisen. Dort finden Sie eine Menge nützlicher integrierter functionen für die Bereinigung von URLs und anderen Eingabefeldern, einschließlich einer Überprüfung auf eine gültige E-Mail (is_email ()), obwohl diese nicht wirklich bereinigt wird.

Da Sie nun ein assoziatives Array in $input , sollten Sie eine switch statement in oem_theme_sanitize_profile_options() schreiben, wenn Sie bestimmte Eingaben isolieren möchten, die als Sonderfälle behandelt werden sollen.

Ziehen Sie die Verwendung von add_settings_error () in Betracht , wenn ein Eingabefeld (z. B. das E-Mail-Feld) ungültig ist.