🏨 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>
237 lines
12 KiB
PHP
237 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* Title: Portfolio homepage
|
|
* Slug: twentytwentyfive/page-portfolio-home
|
|
* Categories: twentytwentyfive_page, posts
|
|
* Keywords: starter
|
|
* Block Types: core/post-content
|
|
* Post Types: page, wp_template
|
|
* Viewport width: 1400
|
|
* Description: A portfolio homepage pattern.
|
|
*
|
|
* @package WordPress
|
|
* @subpackage Twenty_Twenty_Five
|
|
* @since Twenty Twenty-Five 1.0
|
|
*/
|
|
|
|
?>
|
|
<!-- wp:group {"align":"full","layout":{"type":"default"}} -->
|
|
<div class="wp-block-group alignfull">
|
|
<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|50","bottom":"var:preset|spacing|50"}}},"layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)">
|
|
<!-- wp:columns {"align":"wide","style":{"spacing":{"padding":{"top":"var:preset|spacing|80","bottom":"var:preset|spacing|50"}}}} -->
|
|
<div class="wp-block-columns alignwide" style="padding-top:var(--wp--preset--spacing--80);padding-bottom:var(--wp--preset--spacing--50)">
|
|
<!-- wp:column {"width":"50%"} -->
|
|
<div class="wp-block-column" style="flex-basis:50%">
|
|
<!-- wp:heading {"align":"wide","fontSize":"x-large"} -->
|
|
<h2 class="wp-block-heading alignwide has-x-large-font-size"><?php esc_html_e( 'My name is Anna Möller and these are some of my photo projects.', 'twentytwentyfive' ); ?></h2>
|
|
<!-- /wp:heading -->
|
|
</div>
|
|
<!-- /wp:column -->
|
|
|
|
<!-- wp:column {"width":"50%"} -->
|
|
<div class="wp-block-column" style="flex-basis:50%">
|
|
<!-- 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>
|
|
<!-- /wp:column -->
|
|
</div>
|
|
<!-- /wp:columns -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
|
|
<!-- wp:group {"align":"full","style":{"spacing":{"margin":{"top":"0","bottom":"0"}}},"layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignfull" style="margin-top:0;margin-bottom:0">
|
|
<!-- wp:columns {"align":"wide","style":{"spacing":{"blockGap":{"left":"var:preset|spacing|20"}}}} -->
|
|
<div class="wp-block-columns alignwide">
|
|
<!-- wp:column {"width":"66.66%"} -->
|
|
<div class="wp-block-column" style="flex-basis:66.66%">
|
|
<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-query">
|
|
<!-- wp:post-template -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
</div>
|
|
<!-- /wp:column -->
|
|
<!-- wp:column {"width":"33.33%"} -->
|
|
<div class="wp-block-column" style="flex-basis:33.33%">
|
|
<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":"1","postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-query">
|
|
<!-- wp:post-template -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
</div>
|
|
<!-- /wp:column -->
|
|
</div>
|
|
<!-- /wp:columns -->
|
|
|
|
<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
|
|
<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
|
|
<!-- wp:group {"align":"full","style":{"spacing":{"margin":{"top":"0","bottom":"0"}}},"layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignfull" style="margin-top:0;margin-bottom:0">
|
|
<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
|
|
<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":"2","postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"align":"wide","layout":{"type":"default"}} -->
|
|
<div class="wp-block-query alignwide">
|
|
<!-- wp:post-template {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"grid","columnCount":3}} -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
|
|
<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
|
|
<!-- wp:group {"align":"full","style":{"spacing":{"margin":{"top":"0","bottom":"0"}}},"layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignfull" style="margin-top:0;margin-bottom:0">
|
|
<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
|
|
<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
<!-- wp:columns {"align":"wide","style":{"spacing":{"blockGap":{"left":"var:preset|spacing|20"}}}} -->
|
|
<div class="wp-block-columns alignwide">
|
|
<!-- wp:column {"width":"33.33%"} -->
|
|
<div class="wp-block-column" style="flex-basis:33.33%">
|
|
<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":"5","postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-query">
|
|
<!-- wp:post-template -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
</div>
|
|
<!-- /wp:column -->
|
|
<!-- wp:column {"width":"66.66%"} -->
|
|
<div class="wp-block-column" style="flex-basis:66.66%">
|
|
<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":"6","postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-query">
|
|
<!-- wp:post-template -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
</div>
|
|
<!-- /wp:column -->
|
|
</div>
|
|
<!-- /wp:columns -->
|
|
|
|
<!-- wp:spacer {"height":"var:preset|spacing|70"} -->
|
|
<div style="height:var(--wp--preset--spacing--70)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
|
|
<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":"7","postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":null,"parents":[]},"align":"wide","layout":{"type":"default"}} -->
|
|
<div class="wp-block-query alignwide">
|
|
<!-- wp:post-template {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"grid","columnCount":3}} -->
|
|
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} -->
|
|
<div class="wp-block-group">
|
|
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
|
|
<!-- wp:post-title {"isLink":true} /-->
|
|
<!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|accent-4"}}},"typography":{"fontStyle":"normal","fontWeight":"300"}}} /-->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
<!-- /wp:post-template -->
|
|
<!-- wp:query-no-results -->
|
|
<!-- wp:paragraph -->
|
|
<p><?php echo esc_html_x( 'Sorry, but nothing was found. Please try a search with different keywords.', 'Message explaining that there are no results returned from a search.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- /wp:query-no-results -->
|
|
</div>
|
|
<!-- /wp:query -->
|
|
|
|
<!-- wp:separator {"align":"full"} -->
|
|
<hr class="wp-block-separator alignfull has-alpha-channel-opacity"/>
|
|
<!-- /wp:separator -->
|
|
|
|
<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
|
|
<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
|
|
<!-- /wp:spacer -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
|
|
<!-- wp:group {"align":"full","style":{"spacing":{"margin":{"top":"0","bottom":"0"}}},"layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignfull" style="margin-top:0;margin-bottom:0">
|
|
<!-- wp:group {"align":"wide","layout":{"type":"constrained"}} -->
|
|
<div class="wp-block-group alignwide">
|
|
<!-- wp:group {"align":"wide","layout":{"type":"default"}} -->
|
|
<div class="wp-block-group alignwide">
|
|
<!-- wp:paragraph {"fontSize":"small"} -->
|
|
<p class="has-small-font-size"><?php esc_html_e( 'Twenty Twenty-Five', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
<!-- wp:paragraph {"fontSize":"small"} -->
|
|
<p class="has-small-font-size"><?php esc_html_e( 'email@example.com', 'twentytwentyfive' ); ?><br><?php echo esc_html_x( '+1 555 349 1806', 'Phone number.', 'twentytwentyfive' ); ?></p>
|
|
<!-- /wp:paragraph -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
</div>
|
|
<!-- /wp:group -->
|
|
</div>
|
|
<!-- /wp:group -->
|