🏨 Hotel Booking Enhancements: - Implemented Eagle Booking Advanced Pricing add-on - Added Booking.com-style rate management system - Created professional calendar interface for pricing - Integrated deals and discounts functionality 💰 Advanced Pricing Features: - Dynamic pricing models (per room, per person, per adult) - Base rates, adult rates, and child rates management - Length of stay discounts and early bird deals - Mobile rates and secret deals implementation - Seasonal promotions and flash sales 📅 Availability Management: - Real-time availability tracking - Stop sell and restriction controls - Closed to arrival/departure functionality - Minimum/maximum stay requirements - Automatic sold-out management 💳 Payment Integration: - Maintained Redsys payment gateway integration - Seamless integration with existing Eagle Booking - No modifications to core Eagle Booking plugin 🛠️ Technical Implementation: - Custom database tables for advanced pricing - WordPress hooks and filters integration - AJAX-powered admin interface - Data migration from existing Eagle Booking - Professional calendar view for revenue management 📊 Admin Interface: - Booking.com-style management dashboard - Visual rate and availability calendar - Bulk operations for date ranges - Statistics and analytics dashboard - Modal dialogs for quick editing 🔧 Code Quality: - WordPress coding standards compliance - Secure database operations with prepared statements - Proper input validation and sanitization - Error handling and logging - Responsive admin interface 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
104 lines
5.9 KiB
PHP
104 lines
5.9 KiB
PHP
<?php
|
||
/**
|
||
* Title: Event RSVP
|
||
* Slug: twentytwentyfive/event-rsvp
|
||
* Keywords: call-to-action, rsvp, event
|
||
* Categories: call-to-action
|
||
* Block Types: core/post-content
|
||
* Viewport width: 1400
|
||
* Description: RSVP for an upcoming event with a cover image and event details.
|
||
*
|
||
* @package WordPress
|
||
* @subpackage Twenty_Twenty_Five
|
||
* @since Twenty Twenty-Five 1.0
|
||
*/
|
||
|
||
?>
|
||
<!-- wp:group {"align":"full","style":{"spacing":{"blockGap":"0","margin":{"top":"0","bottom":"0"}}},"layout":{"type":"default"}} -->
|
||
<div class="wp-block-group alignfull" style="margin-top:0;margin-bottom:0">
|
||
<!-- wp:columns {"isStackedOnMobile":false,"align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|40","bottom":"var:preset|spacing|80","left":"var:preset|spacing|40","right":"var:preset|spacing|40"},"margin":{"top":"0","bottom":"0"}}}} -->
|
||
<div class="wp-block-columns alignfull is-not-stacked-on-mobile" style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--40)">
|
||
<!-- wp:column {"width":"66.66%"} -->
|
||
<div class="wp-block-column" style="flex-basis:66.66%">
|
||
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"stretch"}} -->
|
||
<div class="wp-block-group">
|
||
<!-- wp:heading {"fontSize":"xx-large"} -->
|
||
<h2 class="wp-block-heading has-xx-large-font-size">
|
||
<?php
|
||
echo wp_kses_post(
|
||
/* translators: This string contains the word "Stories" in four different languages with the first item in the locale's language. */
|
||
_x( '“Stories, <span lang="es">historias</span>, <span lang="uk">iсторії</span>, <span lang="el">iστορίες</span>”', 'Placeholder heading in four languages.', 'twentytwentyfive' )
|
||
);
|
||
?>
|
||
</h2>
|
||
<!-- /wp:heading -->
|
||
|
||
<!-- wp:paragraph {"fontSize":"x-large"} -->
|
||
<p class="has-x-large-font-size"><?php echo esc_html_x( 'Mon, Jan 1', 'Example event date in pattern.', 'twentytwentyfive' ); ?></p>
|
||
<!-- /wp:paragraph -->
|
||
|
||
<!-- wp:spacer {"height":"0px","style":{"layout":{"selfStretch":"fixed","flexSize":"140px"}}} -->
|
||
<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>
|
||
<!-- /wp:spacer -->
|
||
</div>
|
||
<!-- /wp:group -->
|
||
</div>
|
||
<!-- /wp:column -->
|
||
|
||
<!-- wp:column {"width":"12vw"} -->
|
||
<div class="wp-block-column" style="flex-basis:12vw"></div>
|
||
<!-- /wp:column -->
|
||
|
||
<!-- wp:column -->
|
||
<div class="wp-block-column">
|
||
<!-- wp:group {"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"right"}} -->
|
||
<div class="wp-block-group">
|
||
<!-- wp:paragraph {"align":"left","style":{"typography":{"writingMode":"vertical-rl","textTransform":"uppercase","lineHeight":"0.6"}}} -->
|
||
<p class="has-text-align-left" style="line-height:0.6;text-transform:uppercase;writing-mode:vertical-rl"><?php esc_html_e( 'Free Workshop', 'twentytwentyfive' ); ?></p>
|
||
<!-- /wp:paragraph -->
|
||
</div>
|
||
<!-- /wp:group -->
|
||
</div>
|
||
<!-- /wp:column -->
|
||
</div>
|
||
<!-- /wp:columns -->
|
||
|
||
<!-- wp:columns {"align":"full","className":"is-style-section-2","style":{"spacing":{"blockGap":{"top":"0","left":"0"},"padding":{"top":"0","bottom":"0"}}}} -->
|
||
<div class="wp-block-columns alignfull is-style-section-2" style="padding-top:0;padding-bottom:0">
|
||
<!-- wp:column {"width":"50%"} -->
|
||
<div class="wp-block-column" style="flex-basis:50%">
|
||
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20","padding":{"top":"var:preset|spacing|50","bottom":"var:preset|spacing|50","left":"var:preset|spacing|50","right":"var:preset|spacing|50"}},"dimensions":{"minHeight":"33vh"}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"stretch","verticalAlignment":"space-between"}} -->
|
||
<div class="wp-block-group" style="min-height:33vh;padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50)">
|
||
<!-- wp:paragraph -->
|
||
<p><?php esc_html_e( 'This immersive event celebrates the universal human experience through the lenses of history and ancestry, featuring a diverse array of photographers whose works capture the essence of different cultures and historical moments.', 'twentytwentyfive' ); ?></p>
|
||
<!-- /wp:paragraph -->
|
||
|
||
<!-- wp:spacer {"height":"0px","style":{"layout":{"flexSize":"100px","selfStretch":"fixed"}}} -->
|
||
<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>
|
||
<!-- /wp:spacer -->
|
||
|
||
<!-- wp:heading {"fontSize":"xx-large"} -->
|
||
<h2 class="wp-block-heading has-xx-large-font-size"><a href="#"><?php echo esc_html_x( 'RSVP', 'Abbreviation for "Please respond".', 'twentytwentyfive' ); ?></a></h2>
|
||
<!-- /wp:heading -->
|
||
</div>
|
||
<!-- /wp:group -->
|
||
</div>
|
||
<!-- /wp:column -->
|
||
|
||
<!-- wp:column {"width":"50%"} -->
|
||
<div class="wp-block-column" style="flex-basis:50%">
|
||
<!-- wp:cover {"url":"<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/botany-flowers-closeup.webp","dimRatio":0,"isDark":false} -->
|
||
<div class="wp-block-cover is-light"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-0 has-background-dim"></span><img class="wp-block-cover__image-background" alt="<?php esc_attr_e( 'Close up photo of white flowers on a grey background', 'twentytwentyfive' ); ?>" src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/botany-flowers-closeup.webp" data-object-fit="cover"/>
|
||
<div class="wp-block-cover__inner-container">
|
||
<!-- wp:spacer {"height":"var:preset|spacing|20"} -->
|
||
<div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div>
|
||
<!-- /wp:spacer -->
|
||
</div></div>
|
||
<!-- /wp:cover -->
|
||
</div>
|
||
<!-- /wp:column -->
|
||
</div>
|
||
<!-- /wp:columns -->
|
||
</div>
|
||
<!-- /wp:group -->
|