Tribe__Tickets__Tickets::duplicate_ticket( int $post_id, int $ticket_id )

Creates a duplicate ticket based on post id and ticket id.


Parameters

$post_id

(int) (Required) ID of parent "event" post.

$ticket_id

(int) (Required) ID of ticket to duplicate.


Top ↑

Return

(int|boolean) $duplicate_ticket_id New ticket ID or false, if unable to create duplicate.


Top ↑

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;
		}