Die Einstellungen werden zweimal auf der Einstellungsseite mit der Registerkarte gespeichert

Ich habe versucht, Tabbed-Einstellungen in der Admin-Einstellungen-Seite durch ein Tutorial zu zeigen, aber für mich erhalten Einstellungen gespeichert Benachrichtigung für zwei Mal.

Ich denke, es liegt an verschiedenen Einstellungen Feld, aber basierend auf der Auswahl der Registerkarte zeigt nur ein Formular mit der PHP-Bedingung. Es könnte also nur ein Formular mit einem settings_fields() aber wie es zwei gespeicherte Einstellungen beim Speichern anzeigt. Ich weiß keine Ahnung. kann jeder Körper dabei helfen.

Code

  

Sandbox Theme Options

<input type="radio" name="shape" id="radio1" value="1"/> <input type="radio" id="radio2" name="shape" value="2" /> <input type="radio" id="radio3" name="shape" value="3" /> <input type="radio" id="radio4" name="shape" value="4" /> <input type="radio" id="radio5" name="shape" value="5" /> <input type="text" name="sh_color" value="" class="ir" />
<?php settings_fields( 'social' ); for($i=1;$i Social Network <input type="text" name="sfsocial_net" value=""/> Show <input type="checkbox" name="sfsocial_net_show" value="1" /> Lable<input type="text" name="sfsocial_lable" value=""/>
facebook<input type="text" name="facebookun" value=""/>

Versucht nach dem Posten Frage von @MrJustin Beratung

Nachdem ich erfahren hatte, dass ich add_settings_section und add_settings_field abgesehen von register_setting

Hier ist der Code, den ich aus einem anderen Tutorial ausprobiert habe.

 function registering_settings(){ register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' ); } add_action('admin_init','registering_settings'); function callback_testing(){ ?> 

Sandbox Theme Options

<?php } function section_one_callback() { echo 'Some help text goes here.'; } function field_one_callback() { $setting = esc_attr( get_option( 'my-setting' ) ); echo ""; }

Selbst nachdem ich dies versucht habe, erhalte ich Einstellungen zweimal gespeichert. Aber es gibt nur einen Formularabschnitt mit einem settings_fields und nur einem Formular insgesamt. Warum zeigt es zwei gespeicherte Einstellungen an, wenn ich Änderungen speichern drücke.

Bearbeiten

  register_setting( 'my-plugin', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' ); 

Solutions Collecting From Web of "Die Einstellungen werden zweimal auf der Einstellungsseite mit der Registerkarte gespeichert"

Der Schuldige ist:

 < ?php settings_errors(); ?> 

Es wird nicht benötigt und erzeugt eine zweite “Einstellungen gespeichert”. Benachrichtigung, wenn keine Fehler vorliegen.

Bearbeitet zum Formatieren.

Sie richten Ihre Optionen auf nicht traditionelle Weise ein. Sehen Sie sich diese WP / StackExchange- richtige Antwort an. So sollten Sie Ihre Einstellungen einrichten. Das funktioniert einwandfrei. * Hinweis: Meine Antwort ist die richtige.

–Bearbeiten–

Versuchen Sie Folgendes: Ihr tatsächliches Display ist noch ein wenig aus, es sollte nicht zweimal gespeichert werden, ich habe Ihr Formular um Ihren eigentlichen Display-Inhalt gewickelt und Ihren submit_button den Inhalt eingegeben.

 
< ?php if($active_tab == 'new') { settings_fields( 'my-settings-group' ); do_settings_sections( 'my-plugin' ); } else if($active_tab == 'd_options') { // Do D_Options } else if($active_tab == 's_options') { // Do S_Options } submit_button(); ?>

–Another Edit–

Ich habe das bemerkt:

  // Your Code(s) register_setting( 'my-settings-group', 'my-setting' ); settings_fields( 'my-settings-group' ); do_settings_sections( 'my-plugin' ); // Should Be register_setting('my-plugin', 'my-plugin'); settings_fields( 'my-plugin' ); do_settings_sections( 'my-plugin' ); 

Der letzte Teil von add_settings_section () ist die Optionsgruppe selbst. Also wäre “Mein-Plugin” die Gruppe. Die tatsächliche Option wäre der erste Teil von add_settings_field ()

Bedeutung: my-plugin [‘field-one’] ist die Option.

Gehen Sie voran und machen Sie diese Anpassungen und sehen Sie, was Sie bekommen.

Danach post mit einem Update zurück.

Meine verrückte Erfahrung

Schritt 1: Überprüfen Sie den Optionsdatentyp https://developer.wordpress.org/reference/functions/register_setting/

 $args['type'] => string // Valid values are 'string', 'boolean', 'integer', and 'number'. 

Schritt 2 Die Typen dieser Variablen, die vom Formular übergeben werden, müssen mit dem in register_setting deklarierten Typ übereinstimmen. Nachdem alle Typen übereinstimmen, wird die zweite Meldung zum Speichern der Einstellungen nicht mehr angezeigt.

Schritt 3 Wenn die Standardwerte deklariert wurden, werden auch die Datentypen überprüft. Wenn alles funktioniert, werden die Parameter nicht in der database gespeichert. Wenn die Parameter in der database gespeichert sind, stimmt etwas mit den Datentypen nicht. Ein wenig Hilfe beim Überprüfen:

 function vr_sanitize_options($input_values) { $input_values = (array)$input_values; $default = self::PLUGIN_OPTION['default']; // replace this line with default values $is_valid = array(); foreach ($default as $key => $default) { if (array_key_exists($key, $input_values)) { $is_valid[$key] = $input_values[$key]; } else { $is_valid[$key] = $default; } if (gettype($is_valid[$key]) !== gettype($default)) { vr_add_error($key, 'Data type error. The type of data sent by the form in the ' . $key . ' differs from the type declared in the default values'); } } return $is_valid; } /** * Use this to show messages to users about settings validation problems, missing settings or anything else. * @param [type] $key Slug-name to identify the error. Used as part of 'id' attribute in HTML output. * @param [type] $message The formatted message text to display (will be shown inside styled 
and

tags). */ function vr_add_error($key, $message) { /** * Register a settings error to be displayed * * @link https://developer.wordpress.org/reference/functions/add_settings_error/ */ add_settings_error( // Slug title of the setting 'option_name', // Replace this line $key, $message, // Message type, controls HTML class. Accepts 'error' or 'updated' 'error' ); }