wake-up-neo.net

Benutzerdefiniertes Widget mit get_categories. Wählen Sie das Dropdown-Menü

Ich habe ein benutzerdefiniertes Widget erstellt, das ein Auswahlmenü mit allen Kategorien des Blogs anzeigen soll. Ich habe get_categories verwendet, um die Liste zusammenzustellen. Dies funktioniert einwandfrei und alle Kategorien werden in einem Dropdown-Menü angezeigt. Jedes Mal, wenn ich die Widget-Seite speichere und aktualisiere, ist das benutzerdefinierte Widget nicht mehr vorhanden. Ich habe function update gecheckt und dort ist alles in Ordnung. Also dachte ich, es muss so sein, wie ich das Formular erstellt habe. Irgendwelche Ideen? Danke im Voraus.

Ich wollte nicht den gesamten Code sichern, also habe ich nur die Funktion eingefügt, mit der das Formular erstellt wird. Wenn Sie mehr brauchen, schreiben Sie einfach einen Kommentar

function form( $instance ) {

    /* Default Widget Settings */

    $defaults = array(
        'title' => 'Highlight Category',
        'select'=> 'Option 1'
    );

    $instance = wp_parse_args( (array) $instance, $defaults ); 

?>

    <!-- Widget Title -->
    <p>
        <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'lang') ?></label>
        <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
    </p>

    <!-- Widget Article Count -->   
    <p>
        <label for="<?php echo $this->get_field_id('select'); ?>"><?php _e('This is a select menu', 'lang'); ?></label>
        <select name="<?php echo $this->get_field_name('select'); ?>" id="<?php echo $this->get_field_id('select'); ?>" class="widefat"> 
            <option value="<?php echo $this->get_field_name('select'); ?>"><?php echo $instance['select']; ?></option> 
            <?php 
             $categories=  get_categories('child_of=0'); 
             foreach ($categories as $category) {
                $option = '<option value="' . $category->cat_name . '" id="' . $this->get_field_id( 'select' ) . '">';
                $option .= $instance['select'];
                $option .= ' ('. $this->get_field_id( 'select' ) .')';
                $option .= '</option>';
                echo $option;
             }
            ?>
        </select>
    </p>

<?php 
}
2
charlenemasters

Ok, ich habe eine Lösung dafür gefunden: Verwenden von wp_dropdown_categories in Widget-Optionen

Hier ist der Code, den ich stattdessen verwendet habe:

function form( $instance ) {
    /* Default Widget Settings */
    $defaults = array(
        'title' => 'Highlight Category'
    );
    $instance = wp_parse_args( (array) $instance, $defaults ); 
?>

    <!-- Widget Title -->
    <p>
        <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'thstlang') ?></label>
        <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
    </p>

    <!-- Category Select Menu -->   
    <p>
        <select id="<?php echo $this->get_field_id('kwtax'); ?>" name="<?php echo $this->get_field_name('kwtax'); ?>" class="widefat" style="width:100%;">
            <?php foreach(get_terms('category','parent=0&hide_empty=0') as $term) { ?>
            <option <?php selected( $instance['kwtax'], $term->term_id ); ?> value="<?php echo $term->term_id; ?>"><?php echo $term->name; ?></option>
            <?php } ?>      
        </select>
    </p>
<?php 
}
5
charlenemasters

Ich benutze die Funktion wp_dropdown_categories(), sie hilft, meinen Code sauber zu halten. Hier ist mein Code.

  <p>
    <label for="<?php echo $this->get_field_id( 'category' ); ?>"><?php _e( 'Select category', 'textdomain' ); ?>:</label>
    <?php wp_dropdown_categories( array( 'show_option_none' =>' ','name' => $this->get_field_name( 'category' ), 'selected' => $category ) ); ?>
  </p>
3