How To Add A Custom Route For Add/Update Container
First step, you need to create a custom plugin. After that, create a file and paste this code:
<?php if ( !defined( 'ABSPATH' ) ){ exit; } if( class_exists( 'WPCARGO_API' ) ) { class WPCARGO_CUSTOM_CONTAINER_API extends WPCARGO_API { /** * register new custom routes */ public function custom_container_routes() { $base = 'api'; $namespace = $this->wpcargo_namespace.$this->wpcargo_api_version; /** * add container route */ register_rest_route( $namespace, '/' . $base.'/(?P[a-zA-Z0-9-]+)/container/add', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'add_container' ), 'permission_callback' => array( $this, 'wpcargo_api_premission' ) )); /** * update container route */ register_rest_route( $namespace, '/' . $base.'/(?P[a-zA-Z0-9-]+)/container/update', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_container' ), 'permission_callback' => array( $this, 'wpcargo_api_premission' ) )); } /** * register the custom route */ function initialize_custom_routes(){ add_action( 'rest_api_init', array( $this, 'custom_container_routes' ) ); } /** * add container callback */ function add_container( $request ) { $timezone = get_option('timezone_string'); date_default_timezone_set( $timezone ); global $wpcargo; $response = array(); $user_id = (int)trim( wpcapi_user_id( $request->get_param( 'apikey' ) ) ); $con_title = $request->get_param( '_title' ) && !empty( $request->get_param( '_title' ) ) ? trim( $request->get_param( '_title' ) ) : ''; $agent_id = $request->get_param( '_agent_id' ) && !empty( $request->get_param( '_agent_id' ) ) ? (int)trim( $request->get_param( '_agent_id' ) ) : ''; $flight_num = $request->get_param( '_flight_number' ) && !empty( $request->get_param( '_flight_number' ) ) ? trim( $request->get_param( '_flight_number' ) ) : ''; $driver_id = $request->get_param( '_driver_id' ) && !empty( $request->get_param( '_driver_id' ) ) ? (int)trim( $request->get_param( '_driver_id' ) ) : ''; $con_status = $request->get_param( '_status' ) && !empty( $request->get_param( '_status' ) ) ? trim( $request->get_param( '_status' ) ) : ''; if( $con_title ) { /** * prepare arguments */ $args = array( 'post_title' => $con_title, 'post_status' => 'publish', 'post_date' => date('Y-m-d H:i:s'), 'post_author' => $user_id, 'post_type' => 'shipment_container' ); /** * check if container title already exists */ $post_checker = get_posts( array( 'post_type' => 'shipment_container', 'title' => $con_title ) ); if( empty( $post_checker ) ) { $container_id = wp_insert_post( $args ); if( $container_id ) { /** * update post metas */ $assigned_agent = in_array( $agent_id, wpc_agent_ids() ) ? $agent_id : ''; $assigned_driver = in_array( $driver_id, wpc_driver_ids() ) ? $driver_id : ''; $status = in_array( $con_status, $wpcargo->status ) ? $con_status : ''; update_post_meta( $container_id, 'agent_fields', $assigned_agent ); update_post_meta( $container_id, 'wpcargo_driver', $assigned_driver ); update_post_meta( $container_id, 'container_no', $flight_num ); update_post_meta( $container_id, 'container_status', $status ); do_action( 'wpcargo_api_after_add_container', $container_id, $request ); $response = array( 'status' => 'success', 'container_id' => $container_id, 'container_title' => $con_title, 'message' => wpcapi_container_added_message() ); } } else { $response = array( 'status' => 'error', 'message' => __( 'Container title already exists', 'wpcargo-customizer' ) ); } } else { $response = array( 'status' => 'error', 'message' => __( 'Missing container title', 'wpcargo-customizer' ) ); } return $response; } /** * update existing container callback */ function update_container( $request ) { $timezone = get_option('timezone_string'); date_default_timezone_set( $timezone ); global $wpcargo; $response = array(); $user_id = (int)trim( wpcapi_user_id( $request->get_param( 'apikey' ) ) ); $con_title = $request->get_param( '_title' ) && !empty( $request->get_param( '_title' ) ) ? trim( $request->get_param( '_title' ) ) : ''; $date = date( 'Y-m-d' ); $time = date( 'H:i a' ); $location = $request->get_param( '_location' ) && !empty( $request->get_param( '_location' ) ) ? trim( $request->get_param( '_location' ) ) : ''; $con_status = $request->get_param( '_status' ) && !empty( $request->get_param( '_status' ) ) ? trim( $request->get_param( '_status' ) ) : ''; $con_remark = $request->get_param( '_remarks' ) && !empty( $request->get_param( '_remarks' ) ) ? trim( $request->get_param( '_remarks' ) ) : ''; $updated_by = $wpcargo->user_fullname( $user_id ); $update_assigned_shipments = $request->get_param( '_update_assigned_shipments' ) && !empty( $request->get_param( '_update_assigned_shipments' ) ) ? $request->get_param( '_update_assigned_shipments' ) : ''; /** * check if container title is set */ if( $con_title ) { /** * get container id by title * * prepare args */ $args_for_cont_id = array( 'post_type' => 'shipment_container', 'status' => 'publish', 'title' => $con_title, 'fields' => 'ids', 'author' => $user_id, ); /** * query the args to get the results */ $cont_id_result = get_posts( $args_for_cont_id ); /** * get the container id */ $cont_id = (int)get_array_first_value( $cont_id_result ); /** * check if container id exists */ if( $cont_id ) { $prev_status = get_post_meta( $cont_id, 'container_status', true ); $curr_status = in_array( $con_status, $wpcargo->status ) ? $con_status : ''; if( $curr_status ) { /** * update container status */ update_post_meta( $cont_id, 'container_status', $curr_status ); /** * check if "_update_assigned_shipments" is true */ if( $update_assigned_shipments ) { /** * prepare args to get ids of shipments assigned to container */ $args_for_assigned_shipment_ids = array( 'post_type' => 'wpcargo_shipment', 'status' => 'publish', 'fields' => 'ids', 'meta_query' => array( array( 'key' => 'shipment_container', 'value' => $cont_id, 'compare' => '=' ) ) ); $shipment_ids = get_posts( $args_for_assigned_shipment_ids ); if( !empty( $shipment_ids ) && is_array( $shipment_ids ) ) { foreach( $shipment_ids as $id ) { $old_shipment_history = maybe_unserialize( get_post_meta( $id, 'wpcargo_shipments_update', true ) ); $temp_history = array(); if( !empty( wpcargo_history_fields() ) ) { $row = array(); foreach( wpcargo_history_fields() as $key => $value ) { $value = ''; if ( $key == 'date' ) { if( $date ) { $value = $date; } } elseif ( $key == 'time' ) { if( $time ) { $value = $time; } } elseif ( $key == 'location' ) { if( $location ) { $value = $location; } } elseif ( $key == 'remarks' ) { if( $con_remark ) { $value = $con_remark; } } elseif ( $key == 'status' ) { if( $con_status ) { $value = $con_status; } } elseif ( $key == 'updated-name' ) { if( $updated_by ) { $value = $updated_by; } } $row[$key] = $value; } $temp_history[] = $row; } $new_shipment_history = array_merge( $old_shipment_history, $temp_history ); /** * update shipment history */ update_post_meta( $id, 'wpcargo_shipments_update', maybe_serialize( $new_shipment_history ) ); /** * update shipment status alone */ update_post_meta( $id, 'wpcargo_status', $con_status ); wpcargo_send_email_notificatio( $id, $con_status ); } } } $response = array( 'status' => 'success', 'container_id' => $cont_id, 'container_title' => $con_title, 'old_status' => $prev_status, 'new_status' => $curr_status, 'message' => wpcapi_container_updated_message(), 'updated_by' => $updated_by ); } else { $response = array( 'status' => 'error', 'message' => __('Select a valid status. Check your wpcargo status list', 'wpcargo-customizer') ); } } else { $response = array( 'status' => 'error', 'message' => __('Container title doesn\'t exist', 'wpcargo-customizer') ); } } else { $response = array( 'status' => 'error', 'message' => __( 'Missing container title', 'wpcargo-customizer' ) ); } return $response; } } $custom_container_route = new WPCARGO_CUSTOM_CONTAINER_API; $custom_container_route->initialize_custom_routes(); } /** * get all wpcargo agent ids */ function wpc_agent_ids() { $query=get_users(array( 'role' => 'cargo_agent', 'fields' => 'ID' )); return $query; } /** * get all wpcargo driver ids */ function wpc_driver_ids() { $query=get_users(array( 'role' => 'wpcargo_driver', 'fields' => 'ID' )); return $query; } /** * container creation success message */ function wpcapi_container_added_message(){ return __('Container added', 'wpcargo-customizer' ); } /** * container update success message */ function wpcapi_container_updated_message(){ return __('Container updated', 'wpcargo-customizer' ); } /** * get array first value */ function get_array_first_value( $array ) { if( !is_array( $array ) ) { return; } foreach( $array as $value ) { return $value; } }