> Link title, URL, and icon values.
*/
function wpbc_appointment_services_get_provider_admin_links( $resource_id = 0, $include_service_assignments = true ) {
$resource_id = absint( $resource_id );
$links = array();
if ( wpbc_appointment_services_can_manage_availability() ) {
$working_hours_url = function_exists( 'wpbc_get_general_availability_url' )
? wpbc_get_general_availability_url()
: admin_url( 'admin.php?page=wpbc-availability&tab=general_availability' );
$days_off_url = function_exists( 'wpbc_get_availability_url' )
? wpbc_get_availability_url()
: admin_url( 'admin.php?page=wpbc-availability' );
$working_hours_url = add_query_arg( 'wpbc_ag_open', 'working_time', $working_hours_url );
if ( $resource_id ) {
$working_hours_url = add_query_arg( 'resource_id', $resource_id, $working_hours_url );
$days_off_url = add_query_arg( 'resource_id', $resource_id, $days_off_url );
}
$links[] = array(
'title' => __( 'Working Hours', 'booking' ),
'url' => $working_hours_url,
'icon' => 'wpbc-bi-clock',
);
$links[] = array(
'title' => __( 'Days Off', 'booking' ),
'url' => $days_off_url,
'icon' => 'wpbc-bi-calendar-x',
);
}
if ( $include_service_assignments && current_user_can( wpbc_appointment_services_get_manage_capability() ) ) {
$service_assignments_url = admin_url( 'admin.php?page=wpbc-services' );
$services_link_title = __( 'Manage Services', 'booking' );
if ( $resource_id ) {
$service_assignments_url = add_query_arg( 'provider_id', $resource_id, $service_assignments_url );
$services_link_title = __( 'Assigned Services', 'booking' );
}
$links[] = array(
'title' => $services_link_title,
'url' => $service_assignments_url,
'icon' => 'wpbc-bi-grid',
);
}
return (array) apply_filters( 'wpbc_appointment_provider_admin_links', $links, $resource_id, $include_service_assignments );
}
/**
* Render semantic Provider administration links using standard WP buttons.
*
* @param int $resource_id Optional Provider booking resource ID.
* @param string $css_class Optional additional wrapper class.
* @param bool $include_service_assignments Whether to include the Services-catalog shortcut.
*
* @return void
*/
function wpbc_appointment_services_render_provider_admin_links( $resource_id = 0, $css_class = '', $include_service_assignments = true ) {
$links = wpbc_appointment_services_get_provider_admin_links( $resource_id, $include_service_assignments );
if ( empty( $links ) ) {
return;
}
?>
( 'rental' === $selected_mode_id ) ? __( 'Weekdays Availability', 'booking' ) : __( 'General Availability', 'booking' ),
'url' => $weekdays_availability_url,
'icon' => 'wpbc-bi-calendar-week',
);
$guide_links[] = array(
'title' => __( 'Days Availability', 'booking' ),
'url' => $days_availability_url,
'icon' => 'wpbc-bi-calendar-check',
);
}
}
?>
$args Optional min, step, placeholder, help, and slider values.
*
* @return void
*/
function wpbc_appointment_services_render_field( $field_id, $label, $type = 'text', $args = array() ) {
$args = wp_parse_args(
$args,
array(
'min' => '',
'step' => '',
'placeholder' => '',
'help' => '',
'slider' => false,
'slider_min' => 0,
'slider_max' => 100,
'slider_step' => 1,
)
);
$slider_aria_label = '';
if ( $args['slider'] ) {
/* translators: %s: Service numeric field label. */
$slider_aria_label = sprintf( __( 'Adjust %s', 'booking' ), $label );
}
?>
__( 'Example: Initial Consultation', 'booking' ) ) );
wpbc_appointment_services_render_field( 'description', __( 'Description', 'booking' ), 'textarea' );
wpbc_appointment_services_render_picture_field();
wpbc_appointment_services_render_field( 'status', __( 'Status', 'booking' ), 'status' );
}
/**
* Render duration and buffer fields for the inspector.
*
* @return void
*/
function wpbc_appointment_services_render_scheduling_fields() {
wpbc_appointment_services_render_field(
'duration_minutes',
__( 'Duration (minutes)', 'booking' ),
'number',
array(
'min' => 1,
'step' => 1,
'slider' => true,
'slider_min' => 1,
'slider_max' => 480,
'slider_step' => 5,
)
);
wpbc_appointment_services_render_field(
'buffer_before_minutes',
__( 'Buffer before (minutes)', 'booking' ),
'number',
array(
'min' => 0,
'step' => 1,
'slider' => true,
'slider_min' => 0,
'slider_max' => 180,
'slider_step' => 5,
)
);
wpbc_appointment_services_render_field(
'buffer_after_minutes',
__( 'Buffer after (minutes)', 'booking' ),
'number',
array(
'min' => 0,
'step' => 1,
'slider' => true,
'slider_min' => 0,
'slider_max' => 180,
'slider_step' => 5,
)
);
}
/**
* Render Service pricing fields for the inspector.
*
* @return void
*/
function wpbc_appointment_services_render_pricing_fields() {
if ( ! wpbc_appointment_services_is_pricing_available() ) {
?>
0,
'step' => '0.01',
'slider' => true,
'slider_min' => 0,
'slider_max' => 100000,
'slider_step' => 1, //'0.01',
) );
}
/**
* Render the existing booking-resource choices as assigned Providers.
*
* @return void
*/
function wpbc_appointment_services_render_provider_fields() {
?>
'wpbc_service_general',
'group' => 'service-general',
'title' => __( 'General', 'booking' ),
'open' => true,
), 'wpbc_appointment_services_render_general_fields' );
WPBC_UI_Sidebar_Panels::render_collapsible_group( array(
'id' => 'wpbc_service_scheduling',
'group' => 'service-scheduling',
'title' => __( 'Scheduling', 'booking' ),
'open' => true,
), 'wpbc_appointment_services_render_scheduling_fields' );
WPBC_UI_Sidebar_Panels::render_collapsible_group( array(
'id' => 'wpbc_service_pricing',
'group' => 'service-pricing',
'title' => __( 'Pricing', 'booking' ),
), 'wpbc_appointment_services_render_pricing_fields' );
WPBC_UI_Sidebar_Panels::render_collapsible_group( array(
'id' => 'wpbc_service_providers',
'group' => 'service-providers',
'title' => __( 'Providers', 'booking' ),
), 'wpbc_appointment_services_render_provider_fields' );
WPBC_UI_Sidebar_Panels::render_collapsible_group( array(
'id' => 'wpbc_service_form',
'group' => 'service-form',
'title' => __( 'Booking Form', 'booking' ),
), 'wpbc_appointment_services_render_form_fields' );
WPBC_UI_Sidebar_Panels::render_collapsible_group( array(
'id' => 'wpbc_service_advanced',
'group' => 'service-advanced',
'title' => __( 'Advanced', 'booking' ),
), 'wpbc_appointment_services_render_advanced_fields' );
}
/**
* Render the Service editor action in the native right-sidebar footer.
*
* The footer is outside the SimpleBar scrolling element so Save Service is
* immediately visible and remains available while inspector widgets scroll.
* JavaScript reveals it only while the Settings panel has an open editor.
*
* @param array $active_page_arr Active page, tab, and subtab identifiers.
*
* @return void
*/
function wpbc_appointment_services_render_right_sidebar_footer( $active_page_arr ) {
if (
empty( $active_page_arr['active_page'] )
|| 'wpbc-services' !== $active_page_arr['active_page']
|| ! wpbc_appointment_services__is_page()
|| ! current_user_can( wpbc_appointment_services_get_manage_capability() )
) {
return;
}
?>
[booking_appointment]
service_id, provider_id —
services, providers —
form_type —
nummonths, startmonth —
calendar_dates_start, calendar_dates_end —
options —
auto_select_provider —
show_progress —
progress_item_1_title through progress_item_3_title —
progress_item_1_number through progress_item_3_number —
screen_1_title, screen_1_description, screen_2_title, screen_2_description —
allow_past —
[booking_appointment service_id="12" provider_id="5"]
[booking_appointment progress_item_1_title="" progress_item_1_number="01/03" progress_item_2_title="Specialist" progress_item_3_title="Schedule & Details"]