public function serve_request()
{
do_action('woocommerce_api_server_before_serve', $this);
$this->header('Content-Type', $this->handler->get_content_type(), true);
// the API is enabled by default
if (!apply_filters('woocommerce_api_enabled', true, $this) || 'no' === get_option('woocommerce_api_enabled')) {
$this->send_status(404);
echo $this->handler->generate_response(array('errors' => array('code' => 'woocommerce_api_disabled', 'message' => 'The WooCommerce API is disabled on this site')));
return;
}
$result = $this->check_authentication();
// if authorization check was successful, dispatch the request
if (!is_wp_error($result)) {
$result = $this->dispatch();
}
// handle any dispatch errors
if (is_wp_error($result)) {
$data = $result->get_error_data();
if (is_array($data) && isset($data['status'])) {
$this->send_status($data['status']);
}
$result = $this->error_to_array($result);
}
// This is a filter rather than an action, since this is designed to be
// re-entrant if needed
$served = apply_filters('woocommerce_api_serve_request', false, $result, $this);
if (!$served) {
if ('HEAD' === $this->method) {
return;
}
echo $this->handler->generate_response($result);
}
}