Tribe__Tickets__Tickets::duplicate_ticket( int $post_id, int $ticket_id )
Creates a duplicate ticket based on post id and ticket id.
Contents
Parameters
- $post_id
-
(int) (Required) ID of parent "event" post.
- $ticket_id
-
(int) (Required) ID of ticket to duplicate.
Return
(int|boolean) $duplicate_ticket_id New ticket ID or false, if unable to create duplicate.
Source
File: src/Tribe/Tickets.php
public function duplicate_ticket( $post_id, $ticket_id ) {
// Get ticket data.
$ticket = $this->get_ticket( $post_id, $ticket_id );
if ( ! $ticket instanceof Tribe__Tickets__Ticket_Object ) {
return false;
}
// Create data for duplicate ticket.
$data = [
'ticket_name' => $ticket->name . __( '(copy)', 'event-tickets' ),
'ticket_description' => $ticket->description,
'ticket_price' => $ticket->price,
'ticket_show_description' => $ticket->show_description,
'ticket_start_date' => $ticket->start_date,
'ticket_start_time' => $ticket->start_time,
'ticket_end_date' => $ticket->end_date,
'ticket_end_time' => $ticket->end_time,
'tribe-ticket' => [
'capacity' => $ticket->capacity(),
'mode' => $ticket->global_stock_mode(),
]
];
// Add the ticket.
$duplicate_ticket_id = $this->ticket_add( $post_id, $data );
if ( ! $duplicate_ticket_id ) {
return false;
}
// Copy ticket meta from old ticket to new ticket.
$ignore_meta = [
'_sku',
'_tribe_ticket_manual_updated',
'_wp_old_slug',
'total_sales',
];
$ticket_meta = get_post_meta( $ticket->ID );
if ( $ticket_meta ) {
foreach ( $ticket_meta as $meta_key => $meta_values ) {
// Skip meta we don't want to duplicate.
if ( false !== strpos( $meta_key, '_tec_tc_ticket_status_count' ) ){
continue;
}
if ( in_array( $meta_key, $ignore_meta ) ) {
continue;
}
// Delete duplicate tickets meta before adding new meta.
delete_post_meta( $duplicate_ticket_id, $meta_key );
foreach ( $meta_values as $meta_value ) {
// Maybe convert to object, in case meta is serialized.
$meta_value_obj = maybe_unserialize( $meta_value );
add_post_meta( $duplicate_ticket_id, $meta_key, $meta_value_obj );
}
}
}
// Update SKU of new ticket to remove '(COPY)'.
$old_sku = get_post_meta( $duplicate_ticket_id, '_sku', true );
$new_sku = str_replace( '(COPY)', '', $old_sku );
update_post_meta( $duplicate_ticket_id, '_sku', $new_sku, $old_sku );
return $duplicate_ticket_id;
}