should_enqueue_styles ) { wp_enqueue_style( 'adisistemak-booking-for-adi-camping' ); } } /** * Sanitize CSS length values for width/height attributes. * * Allows percentages, px, rem, em, vh, vw, or the keyword auto. * * @param string $value Raw dimension. * @param string $fallback Fallback when invalid. * @return string */ private function sanitize_dimension( $value, $fallback ) { $value = is_string( $value ) ? trim( $value ) : ''; if ( '' === $value ) { return $fallback; } if ( 'auto' === strtolower( $value ) ) { return 'auto'; } if ( preg_match( '/^(\d+(\.\d+)?)(%|px|rem|em|vh|vw)$/', $value ) ) { return $value; } return $fallback; } /** * Render the booking embed shortcode. * * @param array|string $atts Shortcode attributes. * @return string HTML output for the embed. */ public function render_booking_embed( $atts ) { $atts = shortcode_atts( array( 'width' => '100%', 'height' => '600px', 'url' => '', 'camp' => '', ), $atts, 'adisistemak_booking' ); $url = adisistemak_booking_for_adi_camping_sanitize_embed_url( $atts['url'] ); if ( '' === $url ) { $url = adisistemak_booking_for_adi_camping_sanitize_embed_url( adisistemak_booking_for_adi_camping_get_url() ); } if ( '' === $url ) { if ( current_user_can( 'manage_options' ) ) { $settings_url = admin_url( 'options-general.php?page=adisistemak-booking-for-adi-camping' ); $link = '' . esc_html__( 'Settings → Adisistemak Booking Embed for ADI Camping', 'adisistemak-booking-for-adi-camping' ) . ''; return '
' . wp_kses( sprintf( /* translators: %s: link to plugin settings */ __( 'Adisistemak Booking Embed for ADI Camping is not configured. Set the Booking URL under %s.', 'adisistemak-booking-for-adi-camping' ), $link ), array( 'a' => array( 'href' => array(), ), ) ) . '
'; } return ''; } $camp = is_string( $atts['camp'] ) ? sanitize_text_field( $atts['camp'] ) : ''; if ( '' !== $camp ) { $url = add_query_arg( 'camp', $camp, $url ); } $width = $this->sanitize_dimension( $atts['width'], '100%' ); $height = $this->sanitize_dimension( $atts['height'], '600px' ); $style = sprintf( 'width: %s; height: %s;', $width, $height ); $this->should_enqueue_styles = true; wp_enqueue_style( 'adisistemak-booking-for-adi-camping' ); $embed_id = 'adisistemak-booking-for-adi-camping-' . wp_unique_id(); ob_start(); ?>