WC_Connect_Service_Settings_Store::get_enabled_services PHP Méthode

get_enabled_services() public méthode

Shipping services also include instance_id and shipping zone id Note that at this time, only shipping services exist, but this method will return other services in the future
public get_enabled_services ( ) : array
Résultat array
        public function get_enabled_services()
        {
            $enabled_services = array();
            $shipping_services = $this->service_schemas_store->get_all_service_ids_of_type('shipping');
            if (empty($shipping_services)) {
                return $enabled_services;
            }
            // Note: We use esc_sql here instead of prepare because we are using WHERE IN
            // https://codex.wordpress.org/Function_Reference/esc_sql
            $escaped_list = '';
            foreach ($shipping_services as $shipping_service) {
                if (!empty($escaped_list)) {
                    $escaped_list .= ',';
                }
                $escaped_list .= "'" . esc_sql($shipping_service) . "'";
            }
            global $wpdb;
            $methods = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}woocommerce_shipping_zone_methods " . "LEFT JOIN {$wpdb->prefix}woocommerce_shipping_zones " . "ON {$wpdb->prefix}woocommerce_shipping_zone_methods.zone_id = {$wpdb->prefix}woocommerce_shipping_zones.zone_id " . "WHERE method_id IN ({$escaped_list}) " . "ORDER BY zone_order, instance_id;");
            if (empty($methods)) {
                return $enabled_services;
            }
            foreach ((array) $methods as $method) {
                $service_schema = $this->service_schemas_store->get_service_schema_by_id($method->method_id);
                $service_settings = $this->get_service_settings($method->method_id, $method->instance_id);
                if (is_object($service_settings) && property_exists($service_settings, 'title')) {
                    $title = $service_settings->title;
                } else {
                    if (is_object($service_schema) && property_exists($service_schema, 'method_title')) {
                        $title = $service_schema->method_title;
                    } else {
                        $title = _x('Unknown', 'A service with an unknown title and unknown method_title', 'connectforwoocommerce');
                    }
                }
                $method->service_type = 'shipping';
                $method->title = $title;
                $method->zone_name = empty($method->zone_name) ? __('Rest of the World', 'connectforwoocommerce') : $method->zone_name;
                $enabled_services[] = $method;
            }
            usort($enabled_services, array($this, 'sort_services'));
            return $enabled_services;
        }

Usage Example

 protected function get_services_items()
 {
     $service_items = array();
     $enabled_services = $this->service_settings_store->get_enabled_services();
     if (empty($enabled_services)) {
         $service_items[] = (object) array('key' => 'wcc_services_empty', 'type' => 'text', 'class' => 'form_text_body_copy', 'value' => __('No services have been enabled', 'connectforwoocommerce'));
         return $service_items;
     }
     foreach ((array) $enabled_services as $enabled_service) {
         $indicator_key = "{$enabled_service->method_id}_{$enabled_service->instance_id}";
         $failure_timestamp_key = $this->service_settings_store->get_service_failure_timestamp_key($enabled_service->method_id, $enabled_service->instance_id);
         $last_failed_request_timestamp = intval(get_option($failure_timestamp_key, -1));
         $service_settings_url = esc_url(add_query_arg(array('page' => 'wc-settings', 'tab' => 'shipping', 'instance_id' => $enabled_service->instance_id), admin_url('admin.php')));
         $review_link = sprintf(wp_kses(__('<a href="%s">Review service settings</a>', 'connectforwoocommerce'), array('a' => array('href' => array()))), esc_url($service_settings_url));
         $edit_link = sprintf(wp_kses(__('<a href="%s">Edit service settings</a>', 'connectforwoocommerce'), array('a' => array('href' => array()))), esc_url($service_settings_url));
         $ago_edit_link = sprintf(wp_kses(_x('Request was made %1$s ago - <a href="%2$s">edit service settings</a>', 'e.g. two hours', 'connectforwoocommerce'), array('a' => array('href' => array()))), esc_html(human_time_diff($last_failed_request_timestamp)), esc_url($service_settings_url));
         // Figure out if the service has any settings saved at all
         $service_settings = $this->service_settings_store->get_service_settings($enabled_service->method_id, $enabled_service->instance_id);
         if (empty($service_settings)) {
             $indicator = $this->build_indicator($indicator_key, 'notice', 'indicator-error', __('Setup for this service has not yet been completed', 'connectforwoocommerce'), $edit_link);
         } else {
             if (-1 === $last_failed_request_timestamp) {
                 $indicator = $this->build_indicator($indicator_key, 'notice', 'indicator-warning', __('No rate requests have yet been made for this service', 'connectforwoocommerce'), $review_link);
             } else {
                 if (0 === $last_failed_request_timestamp) {
                     $indicator = $this->build_indicator($indicator_key, 'checkmark-circle', 'indicator-success', __('The most recent rate request was successful', 'connectforwoocommerce'), $edit_link);
                 } else {
                     $indicator = $this->build_indicator($indicator_key, 'notice', 'indicator-error', __('The most recent rate request failed', 'connectforwoocommerce'), $ago_edit_link);
                 }
             }
         }
         $items_key = "{$enabled_service->method_id}_{$enabled_service->instance_id}_items";
         $subtitle = sprintf(__('%s Shipping Zone', 'connectforwoocommerce'), $enabled_service->zone_name);
         $service_items[] = (object) array('key' => $items_key, 'title' => $enabled_service->title, 'subtitle' => $subtitle, 'type' => 'indicators', 'items' => array($indicator_key => $indicator));
     }
     return $service_items;
 }