__( 'Jachty', 'yacht-booking' ), 'singular_name' => __( 'Jacht', 'yacht-booking' ), 'menu_name' => __( 'Jachty', 'yacht-booking' ), 'name_admin_bar' => __( 'Jacht', 'yacht-booking' ), 'add_new' => __( 'Dodaj nowy', 'yacht-booking' ), 'add_new_item' => __( 'Dodaj nowy jacht', 'yacht-booking' ), 'new_item' => __( 'Nowy jacht', 'yacht-booking' ), 'edit_item' => __( 'Edytuj jacht', 'yacht-booking' ), 'view_item' => __( 'Zobacz jacht', 'yacht-booking' ), 'all_items' => __( 'Wszystkie jachty', 'yacht-booking' ), 'search_items' => __( 'Szukaj jachtów', 'yacht-booking' ), 'parent_item_colon' => __( 'Nadrzędny jacht:', 'yacht-booking' ), 'not_found' => __( 'Nie znaleziono jachtów', 'yacht-booking' ), 'not_found_in_trash' => __( 'Nie znaleziono jachtów w koszu', 'yacht-booking' ), 'featured_image' => __( 'Zdjęcie jachtu', 'yacht-booking' ), 'set_featured_image' => __( 'Ustaw zdjęcie jachtu', 'yacht-booking' ), 'remove_featured_image' => __( 'Usuń zdjęcie jachtu', 'yacht-booking' ), 'use_featured_image' => __( 'Użyj jako zdjęcie jachtu', 'yacht-booking' ), ); $args = array( 'labels' => $labels, 'description' => __( 'Jachty dostępne do rezerwacji', 'yacht-booking' ), 'public' => false, 'publicly_queryable' => false, 'show_ui' => true, 'show_in_menu' => false, // Custom menu będzie w class-admin.php 'show_in_rest' => true, 'query_var' => true, 'rewrite' => false, 'capability_type' => 'post', 'capabilities' => array( 'edit_post' => 'yacht_booking_manage_yachts', 'read_post' => 'yacht_booking_manage_yachts', 'delete_post' => 'yacht_booking_manage_yachts', 'edit_posts' => 'yacht_booking_manage_yachts', 'edit_others_posts' => 'yacht_booking_manage_yachts', 'publish_posts' => 'yacht_booking_manage_yachts', 'read_private_posts' => 'yacht_booking_manage_yachts', 'delete_posts' => 'yacht_booking_manage_yachts', ), 'has_archive' => false, 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ), ); register_post_type( 'yacht', $args ); } /** * Get yacht capacity * * @param int $yacht_id Yacht post ID. * @return int */ public static function get_capacity( $yacht_id ) { return (int) get_post_meta( $yacht_id, '_yacht_capacity', true ); } /** * Get yacht price per day * * @param int $yacht_id Yacht post ID. * @return float */ public static function get_price_per_day( $yacht_id ) { return (float) get_post_meta( $yacht_id, '_yacht_price_per_day', true ); } /** * Get yacht features * * @param int $yacht_id Yacht post ID. * @return array */ public static function get_features( $yacht_id ) { $features = get_post_meta( $yacht_id, '_yacht_features', true ); return is_array( $features ) ? $features : array(); } /** * Update yacht capacity * * @param int $yacht_id Yacht post ID. * @param int $capacity Capacity. */ public static function update_capacity( $yacht_id, $capacity ) { update_post_meta( $yacht_id, '_yacht_capacity', (int) $capacity ); } /** * Update yacht price per day * * @param int $yacht_id Yacht post ID. * @param float $price Price per day. */ public static function update_price_per_day( $yacht_id, $price ) { update_post_meta( $yacht_id, '_yacht_price_per_day', (float) $price ); } /** * Get yacht alias for Google Calendar global sync. * * @param int $yacht_id Yacht post ID. * @return string */ public static function get_gcal_alias( $yacht_id ) { return (string) get_post_meta( $yacht_id, '_yacht_gcal_alias', true ); } /** * Update yacht alias for Google Calendar global sync. * * @param int $yacht_id Yacht post ID. * @param string $alias Alias. */ public static function update_gcal_alias( $yacht_id, $alias ) { update_post_meta( $yacht_id, '_yacht_gcal_alias', sanitize_text_field( $alias ) ); } /** * Update yacht features * * @param int $yacht_id Yacht post ID. * @param array $features Features array. */ public static function update_features( $yacht_id, $features ) { update_post_meta( $yacht_id, '_yacht_features', is_array( $features ) ? $features : array() ); } /** * Get admin-selected yacht color for the aggregated calendar. * * Returns sanitized hex (#rrggbb, lowercase) or '' when not set. * * @param int $yacht_id Yacht post ID. * @return string */ public static function get_color( $yacht_id ) { $value = (string) get_post_meta( $yacht_id, '_yacht_color', true ); if ( '' === $value ) { return ''; } return preg_match( '/^#[0-9a-f]{6}$/i', $value ) ? strtolower( $value ) : ''; } /** * Update yacht color. Empty value removes the meta (fallback to palette). * * @param int $yacht_id Yacht post ID. * @param string $color Hex color (#rrggbb) or empty string. */ public static function update_color( $yacht_id, $color ) { $color = trim( (string) $color ); if ( '' === $color ) { delete_post_meta( $yacht_id, '_yacht_color' ); return; } if ( preg_match( '/^#[0-9a-f]{6}$/i', $color ) ) { update_post_meta( $yacht_id, '_yacht_color', strtolower( $color ) ); } } }