is_select2 ) { switch ( $this->data_source ) { case 'category': $args = array( 'hide_empty' => true, 'taxonomy' => $this->data_source_name ?? 'category', ); $categories = get_terms( $args ); $choices = array(); if ( ! empty( $categories ) ) { foreach ( $categories as $category ) { if ( ! is_object( $category ) ) { continue; } $choices[ $category->slug ] = $category->name; } } $this->choices = $choices; break; case 'page': $pages = get_pages(); $choices = array(); if ( ! empty( $pages ) ) { foreach ( $pages as $page ) { $choices[ $page->post_name ] = $page->post_title; } } $this->choices = $choices; break; case 'post': $args = array( 'post_type' => 'post', 'posts_per_page' => -1, // Get all posts 'post_status' => 'publish', // Only get published posts ); $posts = get_posts( $args ); $choices = array(); if ( ! empty( $posts ) ) { foreach ( $posts as $post ) { // Limit the post title to 3 words $title_words = explode(' ', $post->post_title); $limited_title = implode(' ', array_slice($title_words, 0, 3)) . '...'; $choices[ $post->post_name ] = $limited_title; } } $this->choices = $choices; break; default: // code... break; } } } /** * Refresh the parameters passed to the JavaScript via JSON. * * @see WP_Customize_Control::to_json() */ public function to_json() { parent::to_json(); $this->json['choices'] = $this->choices; $this->json['placeholder'] = $this->placeholder; $this->json['is_select2'] = $this->is_select2; $this->json['multiple'] = $this->multiple ? ' multiple="multiple"' : ''; if ( $this->multiple ) { $this->json['value'] = implode( ',', (array) $this->json['value'] ); } } /** * Enqueue control related scripts/styles. * * @access public */ public function enqueue() { parent::enqueue(); if ( $this->is_select2 ) { // Script debug. $bloghash_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; /** * Enqueue select2 stylesheet. */ wp_enqueue_style( 'bloghash-select2-style', BLOGHASH_THEME_URI . '/inc/admin/assets/css/select2' . $bloghash_suffix . '.css', false, BLOGHASH_THEME_VERSION, 'all' ); /** * Enqueue select2 script. */ wp_enqueue_script( 'bloghash-select2-js', BLOGHASH_THEME_URI . '/inc/admin/assets/js/libs/select2' . $bloghash_suffix . '.js', array( 'jquery' ), BLOGHASH_THEME_VERSION, true ); } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() */ protected function content_template() { ?>