### Setting Calendar Start Date
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Force the calendar to start on a specific date or use dynamic values like 'tomorrow' or '+1 week'.
```shortcode
[latepoint_book_form calendar_start_date="2024-07-25"]
```
```shortcode
[latepoint_book_form calendar_start_date="tomorrow"]
```
```shortcode
[latepoint_book_form calendar_start_date="+1 week"]
```
```shortcode
[latepoint_book_form calendar_start_date="+2 months"]
```
--------------------------------
### Configure calendar start date via shortcode
Source: https://wpdocs.latepoint.com/set-custom-start-date-for-the-calendar-on-your-booking-form
Use this shortcode to initialize the booking calendar on a specific date. Supports both absolute dates and relative offsets like '+2 months'.
```shortcode
[latepoint_book_button calendar_start_date="2019-04-25"]
```
--------------------------------
### Set Calendar Start Date
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Force the calendar to begin on a specific date or a dynamic value like 'tomorrow' or '+1 week'.
```shortcode
calendar_start_date = "2024-07-25" , "tomorrow" , "+1 week" , "+2 months"
```
--------------------------------
### Set Calendar Start Date
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-calendar-of-events
Define the initial date for the calendar using YYYY-MM-DD format or relative date phrases.
```shortcode
[latepoint_calendar date="+1 month"]
```
--------------------------------
### Enable WordPress Debug Logging
Source: https://wpdocs.latepoint.com/how-to-enable-debug-log
Add these constants to your wp-config.php file to start logging errors to /wp-content/debug.log. Ensure these are removed after troubleshooting is complete.
```php
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );
// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
```
--------------------------------
### Create Helper Class for Settings
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Define a helper class to manage country and currency lists for the payment processor settings.
```php
"Ghana",
"KE" => "Kenya",
"ZA" => "South Africa"];
}
public static function load_currencies_list(){
return ["GHS" => "Ghanian Cedi",
"KES" => "Kenyan shilling",
"ZAR" => "South African rand"];
}
```
--------------------------------
### Pre-selecting Agent with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Skip the agent selection step by providing a specific agent ID or 'any' to auto-assign an available agent.
```shortcode
[latepoint_book_form selected_agent="1"]
```
--------------------------------
### Implement Hook Processing Functions
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Define the logic for registering the processor, adding payment methods, and enabling them based on settings.
```php
processor_code] = ['code' => $this->processor_code,
'name' => __('Paystack', 'latepoint-payments-paystack'),
'image_url' => $this->images_url().'processor-logo.png'];
return $payment_processors;
}
// adds payment method to payment settings
public function register_payment_methods($payment_methods){
$payment_methods = array_merge($payment_methods, $this->get_supported_payment_methods());
return $payment_methods;
}
// enables payment methods if the processor is turned on
public function register_enabled_payment_methods($enabled_payment_methods){
// check if payment processor is enabled in settings
if(OsPaymentsHelper::is_payment_processor_enabled($this->processor_code)){
$enabled_payment_methods = array_merge($enabled_payment_methods, $this->get_supported_payment_methods());
}
return $enabled_payment_methods;
}
...
}
// latepoint-payments-flutterwave.php
```
--------------------------------
### Pre-selecting Service with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Skip the service selection step by providing a specific service ID.
```shortcode
[latepoint_book_form selected_service="1"]
```
--------------------------------
### Pre-select booking parameters via shortcode
Source: https://wpdocs.latepoint.com/add-pre-selected-agent-or-service-on-book-appointment-button
Use these attributes within the [latepoint_book_button] or [latepoint_book_form] shortcodes to pre-fill booking details.
```shortcode
[latepoint_book_button selected_agent="3" selected_service="4" selected_location="1"]
```
```shortcode
[latepoint_book_button selected_agent="3"]
```
```shortcode
[latepoint_book_button selected_service="4"]
```
```shortcode
[latepoint_book_button selected_bundle="1"]
```
```shortcode
[latepoint_book_button selected_location="1"]
```
```shortcode
[latepoint_book_button selected_start_date="2022-04-28"]
```
```shortcode
[latepoint_book_button selected_start_time="600"]
```
```shortcode
[latepoint_book_button selected_total_attendees="2"]
```
```shortcode
[latepoint_book_button selected_duration="60"]
```
--------------------------------
### Pre-selecting Duration with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Skip the duration selection step by presetting the duration in minutes.
```shortcode
[latepoint_book_form selected_duration="60"]
```
--------------------------------
### Output List of Agents
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Use this shortcode to display a list of agents. Specify the number of columns for the layout.
```shortcode
[latepoint_resources items="agents" columns="4"]
```
--------------------------------
### List Bookable Resources
Source: https://wpdocs.latepoint.com/list-of-all-available-shortcodes-for-latepoint
Outputs a list of agents, services, or locations. Supports filtering by IDs, groups, and custom styling.
```shortcode
[latepoint_resources items="agents" columns="4"]
```
```shortcode
[latepoint_resources items="services" columns="4"]
```
```shortcode
[latepoint_resources items="locations" columns="3"]
```
```shortcode
[latepoint_resources items="locations" item_ids="3,5"]
```
```shortcode
[latepoint_resources items="services" group_ids="2,4,6"]
```
```shortcode
[latepoint_resources items="locations" button_caption="Make an Appointment"]
```
```shortcode
[latepoint_resources items="locations" button_bg_color="#111" button_text_color="#fff" button_font_size="18px" button_border_radius="10px"]
```
```shortcode
[latepoint_resources items="locations" limit="4"]
```
--------------------------------
### Showing Specific Services
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Display only a select list of services by providing their IDs.
```shortcode
[latepoint_book_form show_services="1,2,3"]
```
--------------------------------
### Pre-selecting Location with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Skip the location selection step by providing a specific location ID or 'any' to auto-assign an available location.
```shortcode
[latepoint_book_form selected_location="1"]
```
--------------------------------
### Show Specific Services
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Display only a select list of services by providing their IDs in the 'show_services' attribute.
```shortcode
show_services = "1,2,3"
```
--------------------------------
### Assign Any Agent via Shortcode
Source: https://wpdocs.latepoint.com/how-to-skip-agent-selection-step-and-have-agent-automatically-assigned
Use this shortcode to automatically assign any available agent, skipping the agent selection step for the customer. Ensure the 'selected_agent' attribute is set to 'any'.
```shortcode
[latepoint_book_button selected_agent="any"]
```
--------------------------------
### Add Booking Form with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Use the `latepoint_book_form` shortcode to render the booking form directly on a page. Customize its appearance and behavior using attributes.
```shortcode
[latepoint_book_form selected_agent="1" hide_side_panel="yes"]
```
--------------------------------
### List of available booking step codes
Source: https://wpdocs.latepoint.com/add-custom-content-before-or-after-booking-steps
Reference list of valid step codes that can be used to target specific booking steps in action hooks.
```php
$step_codes = [
'customer',
'booking__locations',
'booking__services',
'booking__service_extras',
'booking__custom_fields',
'booking__service_durations',
'booking__group_bookings',
'booking__agents',
'booking__datepicker',
'verify',
'payment__times',
'payment__portions',
'payment__methods',
'payment__processors',
'payment__pay',
'confirmation'
];
```
--------------------------------
### Implement Flutterwave Payment Event Handlers
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Create a JavaScript class to listen for LatePoint booking events and trigger the Flutterwave payment modal.
```javascript
class LatepointPaymentsFlutterwaveAddon {
// Init
constructor(){
this.ready();
}
ready(){
jQuery(document).ready(() => {
jQuery('body').on('latepoint:submitBookingForm', '.latepoint-booking-form-element', (e, data) => {
if(!latepoint_helper.demo_mode && data.is_final_submit && data.direction == 'next'){
let payment_method = jQuery(e.currentTarget).find('input[name="booking[payment_method]"]').val();
switch(payment_method){
case 'inline_checkout':
latepoint_add_action(data.callbacks_list, () => {
return this.initPaymentModal(jQuery(e.currentTarget), payment_method);
});
break;
}
}
});
jQuery('body').on('latepoint:nextStepClicked', '.latepoint-booking-form-element', (e, data) => {
if(!latepoint_helper.demo_mode && (data.current_step == 'payment')){
let payment_method = jQuery(e.currentTarget).find('input[name="booking[payment_method]"]').val();
switch(payment_method){
case 'inline_checkout':
latepoint_add_action(data.callbacks_list, () => {
});
break;
}
}
});
jQuery('body').on('latepoint:initPaymentMethod', '.latepoint-booking-form-element', (e, data) => {
if(data.payment_method == 'inline_checkout'){
let $booking_form_element = jQuery(e.currentTarget);
let $latepoint_form = $booking_form_element.find('.latepoint-form');
latepoint_add_action(data.callbacks_list, () => {
latepoint_show_next_btn($booking_form_element);
});
}
});
jQuery('body').on('latepoint:initStep:payment', '.latepoint-booking-form-element', (e, data) => {
});
});
}
initPaymentModal($booking_form_element, payment_method) {
let deferred = jQuery.Deferred();
let $latepoint_form = $booking_form_element.find('.latepoint-form');
var data = {
action: 'latepoint_route_call',
route_name: latepoint_helper.flutterwave_payment_options_route,
params: $booking_form_element.find('.latepoint-form').serialize(),
layout: 'none',
return_format: 'json'
}
jQuery.ajax({
type : "post",
dataType : "json",
url : latepoint_helper.ajaxurl,
data : data,
success: (data) => {
if(data.status === "success"){
if(data.amount > 0){
$booking_form_element.find('input[name="booking[intent_key]"]').val(data.booking_intent_key);
data.options.callback = (response) => {
if(response.transaction_id){
let $payment_token_field = $booking_form_element.find('input[name="booking[payment_token]"]');
if($payment_token_field.length){
$booking_form_element.find('input[name="booking[payment_token]"]').val(response.transaction_id);
}else{
// create payment token field if it doesn ot exist (when payment step is skipped)
```
--------------------------------
### Output List of Locations
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Use this shortcode to display a list of locations. Specify the number of columns for the layout.
```shortcode
[latepoint_resources items="locations" columns="3"]
```
--------------------------------
### Build Payment Processor Settings Form
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Implementation of the add_settings_fields method to render text, password, select, and media upload fields within the LatePoint settings interface.
```php
processor_code) return false; ?>
HTML that will appear before step content';
}
}
);
// AFTER STEP CONTENT
add_action('latepoint_after_step_content', function($step_code) {
if($step_code == 'booking__agents'){
echo 'Custom HTML that will appear after step content';
}
}
);
```
--------------------------------
### Showing Specific Agents
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Display only a select list of agents by providing their IDs.
```shortcode
[latepoint_book_form show_agents="1,2,3"]
```
--------------------------------
### Skip Agent Step
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Automatically assign an agent by setting 'selected_agent' to 'any', or pre-select a specific agent by its ID.
```shortcode
selected_agent = "1" , "any"
```
--------------------------------
### Create Flutterwave Payment Controller
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Backend controller implementation for generating payment options for the Flutterwave inline checkout.
```php
views_folder = plugin_dir_path( __FILE__ ) . '../views/flutterwave/';
}
/* Generates payment options for Flutterwave inline checkout */
public function get_payment_options(){
// set booking object from passed params
OsStepsHelper::set_booking_object($this->params['booking']);
// set restrictions passed from a form shortcode
OsStepsHelper::set_restrictions($this->params['restrictions']);
$customer = OsAuthHelper::get_logged_in_customer();
// calculate amount to be charged
$amount = OsStepsHelper::$booking_object->specs_calculate_price_to_charge();
try{
if($amount > 0){
// create booking intent in the database
$booking_intent = OsBookingIntentHelper::create_or_update_booking_intent($this->params['booking'], $this->params['restrictions'], ['payment_method' => $this->params['booking']['payment_method']], '');
// create options array, which will be passed to the front-end JS
$options = [
"public_key" => OsSettingsHelper::get_settings_value('flutterwave_publishable_key'),
"tx_ref" => $booking_intent->intent_key,
"amount" => $amount,
"currency" => OsSettingsHelper::get_settings_value('flutterwave_currency_iso_code', 'NGN'),
"country" => OsSettingsHelper::get_settings_value('flutterwave_country_code', 'NG'),
"customer" => [
"email" => $customer->email,
"phone_number" => $customer->phone,
"name" => $customer->full_name
]
,
"customizations" => [
"name" => OsSettingsHelper::get_settings_value('flutterwave_company_name', 'Company'),
"description" => $booking->service->name,
"logo" => OsImageHelper::get_image_url_by_id(OsSettingsHelper::get_settings_value('flutterwave_logo_image_id', false))
]
];
$this->send_json(array('status' => LATEPOINT_STATUS_SUCCESS, 'options' => $options, 'amount' => $amount, 'booking_intent_key' => $booking_intent->intent_key));
}else{
// free booking, nothing to pay (probably coupon was applied)
$this->send_json(array('status' => LATEPOINT_STATUS_SUCCESS, 'message' => __('Nothing to pay', 'latepoint-payments-flutterwave'), 'amount' => $amount));
}
}catch(Exception $e){
error_log($e->getMessage());
$this->send_json(array('status' => LATEPOINT_STATUS_ERROR, 'message' => $e->getMessage()));
}
}
}
endif;
```
--------------------------------
### Skip Location Step
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Automatically assign a location by setting 'selected_location' to 'any', or pre-select a specific location by its ID.
```shortcode
selected_location = "1" , "any"
```
--------------------------------
### Enable Self-Hosted Google Calendar Settings
Source: https://wpdocs.latepoint.com/how-to-enable-self-hosted-google-calendar-setup
Add this filter to your theme's functions.php file to display self-hosted Google Calendar configuration options.
```php
add_filter('latepoint_google_calendar_show_self_hosted_settings', '__return_true');
```
--------------------------------
### Skip Duration Selection
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Preset the booking duration in minutes using the 'selected_duration' attribute.
```shortcode
selected_duration = "60"
```
--------------------------------
### Customize Button Styling
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Control the appearance of the action button by setting background color, text color, font size, and border radius.
```shortcode
[latepoint_resources items="locations" button_bg_color="#111" button_text_color="#fff" button_font_size="18px" button_border_radius="10px"]
```
--------------------------------
### LatePoint Action Hooks
Source: https://wpdocs.latepoint.com/list-of-latepoint-hooks-actions-and-filters
A comprehensive list of action hooks available for extending LatePoint functionality.
```APIDOC
## LatePoint Action Hooks
### Description
These action hooks allow developers to execute custom code at specific points during the LatePoint lifecycle, such as when agents, services, or bookings are saved, updated, or deleted.
### Available Hooks
- **Agent Hooks**: `latepoint_agent_saved`, `latepoint_agent_form`, `latepoint_after_agent_info_on_index`, `latepoint_after_agent_email_notification_templates`
- **Service Hooks**: `latepoint_service_saved`, `latepoint_service_deleted`, `latepoint_quick_form_after_service`, `latepoint_service_edit_durations`, `latepoint_service_form_after`, `latepoint_after_service_extra_form`
- **Booking Hooks**: `latepoint_booking_created`, `latepoint_booking_updated`, `latepoint_booking_will_be_deleted`, `latepoint_booking_deleted`, `latepoint_booking_quick_edit_form_after`, `latepoint_booking_quick_form_payment_info_after`, `latepoint_booking_quick_form_after`, `latepoint_booking_params`, `latepoint_booking_steps_contact_after`, `latepoint_conversation_booking_info_after`
- **Customer Hooks**: `latepoint_step_confirmation_customer_info`, `latepoint_customer_created`, `latepoint_customer_updated`, `latepoint_customer_quick_edit_form_after`, `latepoint_customer_dashboard_after_booking_info_tile`, `latepoint_customer_edit_form_after`, `latepoint_customer_dashboard_after_tabs`, `latepoint_customer_dashboard_information_form_after`, `latepoint_customer_dashboard_after_tab_contents`, `latepoint_after_customer_email_notification_templates`, `latepoint_step_verify_customer_info`
- **Core Hooks**: `latepoint_includes`, `latepoint_init`, `latepoint_wp_enqueue_scripts`, `latepoint_admin_enqueue_scripts`, `latepoint_on_addon_activate`
- **Booking Process Steps**: `latepoint_step_confirmation_before`, `latepoint_step_confirmation_head_info_before`, `latepoint_step_confirmation_head_info_after`, `latepoint_step_confirmation_appointment_info`, `latepoint_process_step`, `latepoint_custom_step_info`, `latepoint_step_confirmation_payment_info`, `latepoint_payment_step_content`, `latepoint_step_verify_appointment_info`, `latepoint_step_verify_payment_info`, `latepoint_steps_side_panel_after`, `latepoint_load_step`
- **Database/Model Hooks**: `latepoint_model_set_data`, `latepoint_model_save`, `latepoint_model_validate`
- **UI/Settings Hooks**: `latepoint_calendar_daily_timeline`, `latepoint_appointments_timeline`, `latepoint_locations_index`, `latepoint_notifications_settings_sms`, `latepoint_reminders_index`, `latepoint_top_bar_before_actions`, `latepoint_top_bar_after_actions`, `latepoint_top_bar_mobile_after_user`, `latepoint_payment_processor_settings`, `latepoint_settings_steps_list_after`, `latepoint_settings_steps_after`
- **Variable Hooks**: `latepoint_available_vars_booking`, `latepoint_available_vars_customer`, `latepoint_available_vars_after`
```
--------------------------------
### Showing Services from Specific Category
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Display only services from a specific category by setting the category ID.
```shortcode
[latepoint_book_form selected_service_category="1"]
```
--------------------------------
### Configure Booking Trigger Element
Source: https://wpdocs.latepoint.com/how-to-add-book-appointment-button
Use data attributes on HTML elements to pass configuration parameters like selected services to the booking trigger.
```html
Book Now
```
--------------------------------
### Showing Specific Service Categories
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Display only a select list of service categories by providing their IDs.
```shortcode
[latepoint_book_form show_service_categories="1,2,3"]
```
--------------------------------
### Preselect Agent for Services
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
When displaying a list of services, you can preselect a specific agent using the 'selected_agent' attribute. Set to 'any' to auto-assign.
```shortcode
[latepoint_resources items="services" selected_agent="any"]
```
--------------------------------
### Pass Backend Variables to Frontend
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Use the latepoint_localized_vars_front filter to expose payment configuration to the JavaScript frontend.
```php
processor_code)){
$localized_vars['is_flutterwave_active'] = true;
// pass variables from settings to frontend
$localized_vars['flutterwave_key'] = OsSettingsHelper::get_settings_value('flutterwave_publishable_key', '');
```
--------------------------------
### Shortcode Integration
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Use the `[latepoint_book_form]` shortcode to embed the booking form directly into your pages. Customize its appearance and behavior using various attributes.
```APIDOC
## Shortcode Integration
### Description
Embed the LatePoint booking form directly onto your page using the `[latepoint_book_form]` shortcode. This method allows for extensive customization through attributes to control the form's appearance, pre-select options, and skip certain steps.
### Method
Shortcode
### Endpoint
N/A (This is a shortcode for page content)
### Parameters
#### Shortcode Attributes
##### Customize Form Appearance
- **hide_side_panel** (string) - Optional - Setting to "yes" hides the left side panel of a booking form. Default: "no". Example: "yes", "no"
- **hide_summary** (string) - Optional - Setting to "yes" hides the summary panel. Default: "no". Example: "yes", "no"
##### Skip steps and control available data
- **selected_location** (string) - Optional - Skip location step by setting to location "ID" or to "any" to auto assign any available location. Example: "1", "any"
- **selected_agent** (string) - Optional - Skip agent step by setting to agent "ID" or to "any" to auto assign any available agent. Example: "1", "any"
- **selected_service** (string) - Optional - Skip service selection step by setting to service "ID". Example: "1"
- **selected_duration** (string) - Optional - Skip duration selection step by presetting duration in minutes. Example: "60"
- **selected_total_attendees** (string) - Optional - Preselect number of attendees to skip that step. Example: "3"
- **selected_service_category** (string) - Optional - Show services from specific category by setting category "ID". Example: "1"
- **calendar_start_date** (string) - Optional - Setting this attribute to a date forces the calendar to start on that date. You can also use dynamic values like "tomorrow", "+1 week", "+2 months" etc. Example: "2024-07-25", "tomorrow", "+1 week", "+2 months"
- **selected_start_date** (string) - Optional - This attribute should be set together with the **selected_start_time** attribute. Setting these two attributes to a specific date and time, will make date & time selection step to be skipped. Example: "2024-07-25"
- **selected_start_time** (string) - Optional - Preselect start time of the booking in minutes. For example "600" is 10:00am. Should be set together with **selected_start_date** attribute. Example: "600"
##### Data for steps
- **show_locations** (string) - Optional - Show only select locations by setting their IDs. Example: "1,2,3"
- **show_agents** (string) - Optional - Show only select agents by setting their IDs. Example: "1,2,3"
- **show_services** (string) - Optional - Show only select services by setting their IDs. Example: "1,2,3"
- **show_service_categories** (string) - Optional - Show only select service categories by setting their IDs. Example: "1,2,3"
##### Other
- **source_id** (string) - Optional - Track the source ID for your booking button or form. Source ID for each booking can be found on the booking edit form in admin. Example: "ANY_VALUE"
### Request Example
```
[latepoint_book_form selected_agent="1" hide_side_panel="yes"]
```
### Response
N/A (This is a shortcode, the response is the rendered booking form on the page)
```
--------------------------------
### Register Payment Hooks
Source: https://wpdocs.latepoint.com/how-to-develop-custom-payment-add-ons-for-latepoint
Hook into LatePoint payment filters within the init_hooks method to register the processor and its methods.
```php
[
'name' => __('Inline Checkout', 'latepoint-payments-flutterwave'),
'label' => __('Inline Checkout', 'latepoint-payments-flutterwave'),
'image_url' => LATEPOINT_IMAGES_URL.'payment_cards.png',
'code' => 'inline_checkout',
'time_type' => 'now'
]
];
}
...
}
// latepoint-payments-flutterwave.php
```
--------------------------------
### Customize Booking Button with Shortcode Attributes
Source: https://wpdocs.latepoint.com/customize-book-button-appearance
Use shortcode attributes to change the button's background color, text color, and caption. Ensure that if the 'css' attribute is used, other style attributes are not set to avoid conflicts.
```shortcode
[latepoint_book_button bg_color="#ffffff" text_color="#000000" caption="Book Now"]
```
--------------------------------
### Show Specific Agents
Source: https://wpdocs.latepoint.com/shortcode-to-output-a-list-of-resource
Display only a select list of agents by providing their IDs in the 'show_agents' attribute.
```shortcode
show_agents = "1,2,3"
```
--------------------------------
### Pre-selecting Attendees with Shortcode
Source: https://wpdocs.latepoint.com/add-booking-form-directly-on-a-page-instead-of-a-button
Preselect the number of attendees to skip that step in the booking form.
```shortcode
[latepoint_book_form selected_total_attendees="3"]
```