Fügen Sie ein neues Kontrollkästchen in den Designoptionen hinzu

Ich versuche eine neue Option zu einem Designoptionen-Bedienfeld hinzuzufügen , um die Kommentarverknüpfungen in den Designvorlagenfiles ein- und auszublenden.

Ich habe die Möglichkeit, im Panel zu erscheinen, aber da stimmt etwas nicht, es funktioniert nicht und es gibt keine PHP-Fehler. Ich habe unten im Hauptoptionen-Code notiert, wo ich die Option als Array hinzugefügt habe und wo sie bereinigt und validiert wurde.

Und am unteren Rand ist der PHP, der die Kommentare Links zeigt / verbirgt nach der Einstellung der Optionen.

Ist das ein php logisches Problem? Und Ideen?

Hauptoptionscode:

/** * Describe the available options **/ $vertigo_options_template = array( array( 'name' => __( 'Accent Color', 'vertigo' ), 'desc' => __( 'Change the accent color by entering a HEX color number. (ie: EE3322)', 'vertigo' ), 'id' => 'accent_color', 'std' => 'ee3322', 'type' => 'colorpicker' ), array( 'name' => __( 'Font', 'vertigo' ), 'desc' => __( 'Enable Hitchcock custom font (Note: this font only supports basic Latin uppercase letters, numerals, and some punctuation.)', 'vertigo' ), 'id' => 'vertigo_font', 'std' => ( '1' == get_option( 'lang_id' ) ) ? 'true' : 'false', 'type' => 'checkbox' ), /** My new Option **/ array( 'name' => __( 'Comments', 'vertigo' ), 'desc' => __( 'Disable comment links)', 'vertigo' ), 'id' => 'disable_comments_link', 'std' => ( '1' == get_option( 'lang_id' ) ) ? 'true' : 'false', 'type' => 'checkbox' ), ); /** * Calculate default option values * * @return array **/ function vertigo_get_default_options() { global $vertigo_options_template; $default_options = array(); foreach ( $vertigo_options_template as $option ) $default_options[$option['id']] = $option['std']; return $default_options; } /** * Create the options form **/ function vertigo_theme_options_do_page() { global $vertigo_options_template; if ( ! isset( $_REQUEST['settings-updated'] ) ) $_REQUEST['settings-updated'] = false; ?> 
<?php screen_icon(); echo "

" . get_current_theme() . ' ' . __( 'Theme Options', 'vertigo' ) . "

"; ?>

<input type="text" name="vertigo_theme_options[]" id="" value="" class="color { pickerPosition:'right' }" /> <input type="checkbox" name="vertigo_theme_options[]" id="" value="true" /> <label class="description" for=""> <img src="https://wordpress.stackexchange.com/questions/23681/add-a-new-checkbox-in-theme-options//inc/images/hitchcock.gif" alt="Hitchcock" id="hitchcock-sample"/>

'reset' ) ); ?>

$value ) { if ( isset( $defaults[$field] ) ) $input[$field] = $defaults[$field]; else unset( $input[$field] ); } } return $input; }

Und ich verwende dies in meinen Vorlagendateien, um die Kommentarvorlage ein- und auszublenden:

    

So sehen die Optionen in der DB namens vertigo_theme_options :

 a:3:{s:12:"accent_color";s:6:"EE3322";s:12:"vertigo_font";s:4:"true";s:21:"disable_comments_link";s:5:"true";} 

Edit 7/25/11: Dies funktioniert in der Vorlagendatei; müssen zuerst die Optionen aufrufen:

     

Solutions Collecting From Web of "Fügen Sie ein neues Kontrollkästchen in den Designoptionen hinzu"

Um den ersten Teil Ihrer Frage zu beantworten: Ihr Einstellungsformular hat bereits den checkbox Fall abgedeckt; Wenn Sie also eine neue Checkbox-Eingabe hinzufügen, müssen Sie dem Switch nichts hinzufügen . Dieser Code gilt für alle Checkbox-Eingaben, die Sie hinzufügen:

 case 'checkbox': ?>  /> < ?php break; 

Mehr zum switch vom PHP.net Handbuch und von w3schools .

Ich bin ein wenig verwirrt durch den Wortlaut Ihrer Frage:

Ich habe die Möglichkeit, über das Array im Panel zu erscheinen

gegen

Ich habe unten ... bemerkt, wo es scheint, ich muss es in den "create form" Abschnitt in der PHP hinzufügen, die das Formular erstellt.

Also: Erscheint das neue Kontrollkästchen im Formular Einstellungen oder wird es nicht angezeigt ?

BEARBEITEN

Da das Einstellungsfeld im Einstellungsformular korrekt angezeigt wird, werde ich versuchen, die nächsten beiden Probleme anzugehen: Die Option wird nicht ordnungsgemäß gespeichert und die Option wird nicht korrekt ausgegeben.

Das Wichtigste zuerst: Ist die Option den Wert in der database richtig zu speichern, basierend auf der Auswahl des Formularfeldes?

Wenn es nicht korrekt gespeichert wird , besteht das Problem möglicherweise darin, dass Sie nicht ordnungsgemäß danach suchen. Wenn das Kontrollkästchen nicht aktiviert ist, wird der gesamte Parameter in den POST-Daten weggelassen. In diesem Fall müssen Sie, um den Wert in der DB zu speichern, nach dem eingestellten Optionswert suchen, zB:

 < ?php $vertigo_options['disable_comments_link'] = ( isset( $_POST['disable_comments_link'] ) ? true : false ); ?> 

Hinweis: Sie sollten anpassen, wie auch immer Sie die Formulardaten bereinigen. Wenn Sie das Einstellungs-API verwenden, sieht es eher so aus:

 < ?php $output['disable_comments_link'] = ( isset( $input['disable_comments_link'] ) ? true : false ); ?> 

Bringt uns das näher?

BEARBEITEN 2

Wir wissen also, dass die Option in der database korrekt gespeichert wird. Jetzt müssen wir nur noch sicherstellen, dass es in der Vorlage korrekt ausgegeben wird.

Nächste Frage: Sind die Optionen in der DB diskret oder als Array gespeichert?

Aus dem Formular-Markup Ihrer Einstellungen scheint es, dass die Optionen als Array gespeichert sind. get_option() müssen wir get_option() für das Array aufrufen und dann Werte in diesem Array verwenden:

 < ?php $vertigo_theme_options = get_option( 'vertigo_options' ); ?> 

Hinweis: vertigo_get_theme_options() Namen des tatsächlichen databaseeintrags zu finden, vertigo_get_theme_options() sich an die function vertigo_get_theme_options() . Sie können diese function auch einfach aufrufen:

 < ?php $vertigo_theme_options = vertigo_get_theme_options(); ?> 

$vertigo_theme_options , jetzt sollten Sie Ihre Option in $vertigo_theme_options ; z.B:

 < ?php if ( 'true' == $vertigo_theme_options['disable_comments_link'] ) { ?> < ?php comments_template( '', true ); ?> < ?php } ?> 

Bringt uns das dahin?

BEARBEITEN 3

option_name unter wp_options ist vertigo_theme_options

Dann versuchen Sie Folgendes:

 < ?php $vertigo_theme_options = get_option( 'vertigo_theme_options' ); ?> < ?php if ( 'true' == $vertigo_theme_options['disable_comments_link'] ) { ?> < ?php comments_template( '', true ); ?> < ?php } ?> 

Ich bin nur zu 100% sicher, dass dies der Fall sein sollte.

beantwortet deine Frage nicht wirklich, aber als Heads-up gibt es einige wirklich gute Plugins zum Erstellen von Themenoptionen. Für mich ist es fast nicht mehr die Mühe wert, es selbst zu tun.

http://wordpress.org/extend/plugins/options-framework/