0, ), $atts, 'bridgehub_testimonial_slider' ); $slider_id = absint( $atts['id'] ); if ( $slider_id <= 0 ) { return ''; } $slider_post = get_post( $slider_id ); if ( ! $slider_post || 'bridgehub_slider' !== $slider_post->post_type ) { return ''; } // Primary: ordered ID list from testimonial manager. $testimonial_ids = get_post_meta( $slider_id, 'bridgehub_testimonial_ids', true ); if ( is_array( $testimonial_ids ) && ! empty( $testimonial_ids ) ) { return $this->render_children_slider_output( $slider_id, $testimonial_ids ); } // Fallback: query by parent relationship meta. $parent_testimonials = get_posts( array( 'post_type' => 'bhub_testimonial', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Meta query is required to retrieve testimonials assigned to this slider. 'meta_query' => array( array( 'key' => 'bridgehub_testimonial_parent_slider', 'value' => $slider_id, ), ), 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC', ) ); if ( ! empty( $parent_testimonials ) ) { $ids = wp_list_pluck( $parent_testimonials, 'ID' ); return $this->render_children_slider_output( $slider_id, $ids ); } // Legacy: slider post itself holds the testimonial content. return $this->render_single_testimonial_output( $slider_post ); } public function render_legacy_shortcode( $atts ) { $all_sliders = get_posts( array( 'post_type' => 'bridgehub_slider', 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'modified', 'order' => 'DESC', ) ); if ( empty( $all_sliders ) ) { return ''; } ob_start(); foreach ( $all_sliders as $slider ) { $testimonial_ids = get_post_meta( $slider->ID, 'bridgehub_testimonial_ids', true ); if ( is_array( $testimonial_ids ) && ! empty( $testimonial_ids ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $this->render_children_slider_output( $slider->ID, $testimonial_ids ); } else { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output is escaped within render_single_testimonial_output(). echo $this->render_single_testimonial_output( $slider ); } } return ob_get_clean(); } /** * Render a carousel with multiple child testimonial slides. */ private function render_children_slider_output( $slider_id, $testimonial_ids ) { $testimonial_ids = array_map( 'absint', array_filter( $testimonial_ids ) ); $query = new WP_Query( array( 'post_type' => 'bhub_testimonial', 'post__in' => $testimonial_ids, 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'post__in', ) ); if ( ! $query->have_posts() ) { wp_reset_postdata(); return ''; } $settings = $this->get_slider_settings( $slider_id ); $output = $this->render_slider_output( $query, $settings, 'bridgehub-' . $slider_id ); wp_reset_postdata(); return $output; } /** * Render a single-testimonial slider (legacy mode). */ private function render_single_testimonial_output( $slider_post ) { $settings = $this->get_slider_settings( $slider_post->ID ); $bg_color = sanitize_hex_color( $settings['bg_color'] ); $text_color = sanitize_hex_color( $settings['text_color'] ); $image_height = absint( $settings['image_height'] ); $image_border_radius = absint( $settings['image_border_radius'] ); $auto_slide = 'yes' === $settings['auto_slide'] ? 'true' : 'false'; $interval = absint( $settings['interval'] ); $transition_speed = absint( $settings['transition_speed'] ); $show_navigation = 'yes' === $settings['navigation']; $show_indicators = 'yes' === $settings['indicators']; $pause_on_hover = 'yes' === $settings['pause_on_hover'] ? 'true' : 'false'; $client_name = get_the_title( $slider_post ); $testimonial = apply_filters( 'the_content', $slider_post->post_content ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound $designation = get_post_meta( $slider_post->ID, 'bridgehub_testimonial_designation', true ); if ( '' === $designation ) { $designation = get_post_meta( $slider_post->ID, 'ajsqtesl_slider_subtitle', true ); } $company = get_post_meta( $slider_post->ID, 'bridgehub_testimonial_company', true ); $rating = absint( get_post_meta( $slider_post->ID, 'bridgehub_testimonial_rating', true ) ); $img_style = sprintf( 'height:%spx;border-radius:%s%%;', $image_height, $image_border_radius ); ob_start(); ?>
get_theme_mod( 'slider_bg_color', '#f0f0f0' ), 'text_color' => get_theme_mod( 'slider_text_color', '#262525' ), 'image_height' => get_theme_mod( 'thumbnail_height', '100' ), 'image_border_radius' => get_theme_mod( 'ajsqtesl_image_border_radius', '0' ), 'auto_slide' => 'yes', 'interval' => '5000', 'transition_speed' => '500', 'navigation' => 'yes', 'indicators' => 'yes', 'pause_on_hover' => 'yes', ); if ( $slider_id > 0 ) { $meta_keys = array( 'bg_color' => 'bridgehub_slider_bg_color', 'text_color' => 'bridgehub_slider_text_color', 'image_height' => 'bridgehub_slider_image_height', 'image_border_radius' => 'bridgehub_slider_image_border_radius', 'auto_slide' => 'bridgehub_slider_auto_slide', 'interval' => 'bridgehub_slider_interval', 'transition_speed' => 'bridgehub_slider_transition_speed', 'navigation' => 'bridgehub_slider_navigation', 'indicators' => 'bridgehub_slider_indicators', 'pause_on_hover' => 'bridgehub_slider_pause_on_hover', ); foreach ( $meta_keys as $key => $meta_key ) { $val = get_post_meta( $slider_id, $meta_key, true ); if ( '' !== $val ) { $defaults[ $key ] = $val; } } } return $defaults; } /** * Render the multi-testimonial carousel HTML. */ private function render_slider_output( $query, $settings, $unique_id ) { $bg_color = sanitize_hex_color( $settings['bg_color'] ); $text_color = sanitize_hex_color( $settings['text_color'] ); $image_height = absint( $settings['image_height'] ); $image_border_radius = absint( $settings['image_border_radius'] ); $auto_slide = 'yes' === $settings['auto_slide'] ? 'true' : 'false'; $interval = absint( $settings['interval'] ); $transition_speed = absint( $settings['transition_speed'] ); $show_navigation = 'yes' === $settings['navigation']; $show_indicators = 'yes' === $settings['indicators']; $pause_on_hover = 'yes' === $settings['pause_on_hover'] ? 'true' : 'false'; ob_start(); ?>