<?php
if ( class_exists( 'WP_Customize_Control' ) && !class_exists( 'Evision_Customizer_Category_Dropdown_Control' )){
    /**
     * Custom Control for category dropdown
     * @since 1.0.0
     *
     */
    class Evision_Customizer_Category_Dropdown_Control extends WP_Customize_Control {

        /**
         * Declare the control type.
         *
         * @access public
         * @var string
         */
        public $type = 'category_dropdown';

            /**
             * Taxonomy.
             *
             * @access public
             * @var string
             */
            public $taxonomy = '';

            /**
             * Constructor.
             *
             * @since 1.0.0
             *
             * @param WP_Customize_Manager $manager Customizer bootstrap instance.
             * @param string               $id      Control ID.
             * @param array                $args    Optional. Arguments to override class property defaults.
             */
            public function __construct( $manager, $id, $args = array() ) {

                $our_taxonomy = 'category';
                if ( isset( $args['taxonomy'] ) ) {
                    $taxonomy_exist = taxonomy_exists( esc_attr( $args['taxonomy'] ) );
                    if ( true === $taxonomy_exist ) {
                        $our_taxonomy = esc_attr( $args['taxonomy'] );
                    }
                }
                $args['taxonomy'] = $our_taxonomy;
                $this->taxonomy = esc_attr( $our_taxonomy );

                parent::__construct( $manager, $id, $args );
            }

            /**
             * Render content.
             *
             * @since 1.0.0
             */
            public function render_content() {

                $tax_args = array(
                    'hierarchical' => 0,
                    'taxonomy'     => $this->taxonomy,
                );
                $all_taxonomies = get_categories( $tax_args );

            ?>
            <label>
                <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
                <select <?php $this->link(); ?>>
                    <?php
                    printf( '<option value="%s" %s>%s</option>', '', selected( $this->value(), '', false ), ' ' );
                    ?>
                    <?php if ( ! empty( $all_taxonomies ) ) :  ?>
                        <?php foreach ( $all_taxonomies as $key => $tax ) :  ?>
                            <?php
                            printf( '<option value="%s" %s>%s</option>', esc_attr( $tax->term_id ), selected( $this->value(), $tax->term_id, false ), esc_html( $tax->name ) );
                            ?>
                        <?php endforeach ?>
                    <?php endif ?>
                </select>
            </label>
            <?php
            }
    }
}
