web-dev-qa-db-ja.com

Get_categories選択メニュードロップダウンを使用したカスタムウィジェット

私はブログが持っているすべてのカテゴリで選択メニューを表示することになっているカスタムウィジェットを作成しました。リストをコンパイルするためにget_categoriesを使用しました。これはうまく機能し、すべてのカテゴリがドロップダウンメニューに表示されます。ウィジェットページを保存して更新するたびに、カスタムウィジェットはもう存在しません。私はfunction updateをチェックしました、そしてすべてはそこに問題ありません。だから私はそれが私がフォームを作成した方法でなければならないと考えました。何か案は?前もって感謝します。

すべてのコードをダンプしたくなかったので、フォームを作成する関数を貼り付けるだけでした。もっとコメントが必要な場合

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]を私はこれのおかげで解決策を見つけた: ウィジェットのオプションでwp_dropdown_categoriesを使用

これが私が代わりに使ったコードです:

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

私はwp_dropdown_categories()関数を使います、それは私のコードをきれいに保つのを助けます。これが私のコードです。

  <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