So erweitern Sie benutzerdefinierte Steuerelementtypen, um Seiten aufzulisten

Ich habe: Ich verwende derzeit $wp_customize , um Optionen zum Anpassen des Themenbereichs hinzuzufügen.

Mein Ziel: Mein Ziel ist es, $wp_customize zu erweitern, sodass ich eine Liste der verfügbaren Seiten als Kontrollkästchen anzeigen kann. Ich habe Ottos Tutorial benutzt, aber es deckt nur Textbereiche ab. Ich bin mir bewusst, dass es einen Dropdown-Seiten- Steuerelementtyp gibt, aber ich möchte in der Lage sein, die Seiten als eine Liste von Kontrollkästchen anzuzeigen, kein Auswahlelement. Bisher habe ich Folgendes geschafft:

 add_action( 'customize_register', 'my_theme_customize_register' ); function my_theme_customize_register($wp_customize) { // CREATE A CLASS FOR DISPLAYING PAGES AS OPTIONS class Customize_Pages_Control extends WP_Customize_Control { public $type = 'pages'; public function render_content() { $pages = get_pages(); ?> label ); ?>   add_section( 'home_page', array( 'title' => __( 'Home Page' ), 'priority' => 37, ) ); // ADD SETTING & CONTROL $wp_customize->add_setting( 'slideshow_pages' , array( 'capability' => 'edit_theme_options', ) ); $wp_customize->add_control( new Customize_Pages_Control ( $wp_customize, 'slideshow_pages', array( 'label' => __( 'Add pages to slideshow' ), 'section' => 'home_page', 'settings' => 'slideshow_pages', 'type' => 'pages', ) ) ); } 

Das fügt die Steuerelemente erfolgreich hinzu und listet die Seiten in dem Optionsmenü auf aber ich kann nicht herausfinden, wie die Änderungen tatsächlich gespeichert werden, sobald der Benutzer die Kästchen deaktiviert. Ebenso kann ich derzeit keine gespeicherten Daten verwenden (dh ich kann nicht überprüfen, welche Seiten innerhalb des Themas selbst ausgewählt wurden.)

Jede Hilfe oder Hinweise werden sehr geschätzt

Solutions Collecting From Web of "So erweitern Sie benutzerdefinierte Steuerelementtypen, um Seiten aufzulisten"

Ich erkannte, dass ich die function link() nicht vollständig verstand; Jetzt merke ich, dass es das Steuerelement mit der richtigen Einstellung verknüpft, was es problematisch macht, mehrere Steuerelemente auf eine Einstellung zu richten. Ich änderte meine ursprüngliche function, um stattdessen eine versteckte Eingabe hinzuzufügen, die meinen endgültigen Wert zusammen mit den Checkboxen enthält. Ich habe dann ein kleines Javascript eingereiht, das nach Änderungen an den Kontrollkästchen sucht, den Wert zu meiner versteckten Eingabe hinzufügt und ein Klickereignis austriggers, damit die Seite aktualisiert wird:

 class Customize_Pages_Control extends WP_Customize_Control { public $type = 'pages'; public function enqueue() { // Enqueue script wp_register_script( 'lma-page-selector', get_stylesheet_directory_uri() . '/library/js/libs/lma-page-selector.js', array(), '', false ); wp_enqueue_script( 'lma-page-selector' ); } public function render_content() { $pages = get_pages(); ?> < ?php echo esc_html( $this->label ); ?> link()?>/> < ?php // Field to hold final values foreach ($pages as $page) { // Loop through pages and add checkboxes ?>  < ?php } } } 

Und das Javascript:

 jQuery(document).ready(function($) { $('.customize-control-pages input[type="checkbox"]').change(function() { var vals = $('.customize-control-pages input:checked').map(function() { return $(this).val(); }).get().join(','); $('.customize-control-pages input[type="text"]').val(vals).trigger('change'); }); }); 

Es fühlt sich klugig an, aber es scheint zu funktionieren. Ich muss noch etwas Desinfektion hinzufügen, aber es ist ein Anfang. Hoffentlich könnte jemand es nützlich finden