Automattic\WooCommerce\Internal\Admin\Orders\MetaBoxes

CustomMetaBox::handle_add_meta()privateWC 1.0

Part of WP Core's wp_ajax_add_meta. This is re-implemented to support updating meta for custom tables.

Метод класса: CustomMetaBox{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

// private - только в коде основоного (родительского) класса
$result = $this->handle_add_meta( $order, $meta_key, $meta_value );
$order(WC_Order) (обязательный)
Order object.
$meta_key(строка) (обязательный)
Meta key.
$meta_value(строка) (обязательный)
Meta value.

Код CustomMetaBox::handle_add_meta() WC 8.7.0

private function handle_add_meta( WC_Order $order, string $meta_key, string $meta_value ) {
	$count = 0;
	if ( is_protected_meta( $meta_key ) ) {
		wp_send_json_error( 'protected_meta' );
		wp_die();
	}
	$metas_for_current_key = wp_list_filter( $order->get_meta_data(), array( 'key' => $meta_key ) );
	$meta_ids              = wp_list_pluck( $metas_for_current_key, 'id' );
	$order->add_meta_data( $meta_key, $meta_value );
	$order->save_meta_data();
	$metas_for_current_key_with_new = wp_list_filter( $order->get_meta_data(), array( 'key' => $meta_key ) );
	$meta_id                        = 0;
	$new_meta_ids                   = wp_list_pluck( $metas_for_current_key_with_new, 'id' );
	$new_meta_ids                   = array_values( array_diff( $new_meta_ids, $meta_ids ) );
	if ( count( $new_meta_ids ) > 0 ) {
		$meta_id = $new_meta_ids[0];
	}
	$response = new WP_Ajax_Response(
		array(
			'what'     => 'meta',
			'id'       => $meta_id,
			'data'     => $this->list_meta_row(
				array(
					'meta_id'    => $meta_id,
					'meta_key'   => $meta_key, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- false positive, not a meta query.
					'meta_value' => $meta_value, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- false positive, not a meta query.
				),
				$count
			),
			'position' => 1,
		)
	);
	$response->send();
}