/** * REST API: WP_REST_Server class * * @package WordPress * @subpackage REST_API * @since 4.4.0 */ /** * Core class used to implement the WordPress REST API server. * * @since 4.4.0 */ #[AllowDynamicProperties] class WP_REST_Server { /** * Alias for GET transport method. * * @since 4.4.0 * @var string */ const READABLE = 'GET'; /** * Alias for POST transport method. * * @since 4.4.0 * @var string */ const CREATABLE = 'POST'; /** * Alias for POST, PUT, PATCH transport methods together. * * @since 4.4.0 * @var string */ const EDITABLE = 'POST, PUT, PATCH'; /** * Alias for DELETE transport method. * * @since 4.4.0 * @var string */ const DELETABLE = 'DELETE'; /** * Alias for GET, POST, PUT, PATCH & DELETE transport methods together. * * @since 4.4.0 * @var string */ const ALLMETHODS = 'GET, POST, PUT, PATCH, DELETE'; /** * Namespaces registered to the server. * * @since 4.4.0 * @var array */ protected $namespaces = array(); /** * Endpoints registered to the server. * * @since 4.4.0 * @var array */ protected $endpoints = array(); /** * Options defined for the routes. * * @since 4.4.0 * @var array */ protected $route_options = array(); /** * Caches embedded requests. * * @since 5.4.0 * @var array */ protected $embed_cache = array(); /** * Stores request objects that are currently being handled. * * @since 6.5.0 * @var array */ protected $dispatching_requests = array(); /** * Instantiates the REST server. * * @since 4.4.0 */ public function __construct() { $this->endpoints = array( // Meta endpoints. '/' => array( 'callback' => array( $this, 'get_index' ), 'methods' => 'GET', 'args' => array( 'context' => array( 'default' => 'view', ), ), ), '/batch/v1' => array( 'callback' => array( $this, 'serve_batch_request_v1' ), 'methods' => 'POST', 'args' => array( 'validation' => array( 'type' => 'string', 'enum' => array( 'require-all-validate', 'normal' ), 'default' => 'normal', ), 'requests' => array( 'required' => true, 'type' => 'array', 'maxItems' => $this->get_max_batch_size(), 'items' => array( 'type' => 'object', 'properties' => array( 'method' => array( 'type' => 'string', 'enum' => array( 'POST', 'PUT', 'PATCH', 'DELETE' ), 'default' => 'POST', ), 'path' => array( 'type' => 'string', 'required' => true, ), 'body' => array( 'type' => 'object', 'properties' => array(), 'additionalProperties' => true, ), 'headers' => array( 'type' => 'object', 'properties' => array(), 'additionalProperties' => array( 'type' => array( 'string', 'array' ), 'items' => array( 'type' => 'string', ), ), ), ), ), ), ), ), ); } /** * Checks the authentication headers if supplied. * * @since 4.4.0 * * @return WP_Error|null|true WP_Error if authentication error occurred, null if authentication * method wasn't used, true if authentication succeeded. */ public function check_authentication() { /** * Filters REST API authentication errors. * * This is used to pass a WP_Error from an authentication method back to * the API. * * Authentication methods should check first if they're being used, as * multiple authentication methods can be enabled on a site (cookies, * HTTP basic auth, OAuth). If the authentication method hooked in is * not actually being attempted, null should be returned to indicate * another authentication method should check instead. Similarly, * callbacks should ensure the value is `null` before checking for * errors. * * A WP_Error instance can be returned if an error occurs, and this should * match the format used by API methods internally (that is, the `status` * data should be used). A callback can return `true` to indicate that * the authentication method was used, and it succeeded. * * @since 4.4.0 * * @param WP_Error|null|true $errors WP_Error if authentication error occurred, null if authentication * method wasn't used, true if authentication succeeded. */ return apply_filters( 'rest_authentication_errors', null ); } /** * Converts an error to a response object. * * This iterates over all error codes and messages to change it into a flat * array. This enables simpler client behavior, as it is represented as a * list in JSON rather than an object/map. * * @since 4.4.0 * @since 5.7.0 Converted to a wrapper of {@see rest_convert_error_to_response()}. * * @param WP_Error $error WP_Error instance. * @return WP_REST_Response List of associative arrays with code and message keys. */ protected function error_to_response( $error ) { return rest_convert_error_to_response( $error ); } /** * Retrieves an appropriate error representation in JSON. * * Note: This should only be used in WP_REST_Server::serve_request(), as it * cannot handle WP_Error internally. All callbacks and other internal methods * should instead return a WP_Error with the data set to an array that includes * a 'status' key, with the value being the HTTP status to send. * * @since 4.4.0 * * @param string $code WP_Error-style code. * @param string $message Human-readable message. * @param int|null $status Optional. HTTP status code to send. Default null. * @return string JSON representation of the error. */ protected function json_error( $code, $message, $status = null ) { if ( $status ) { $this->set_status( $status ); } $error = compact( 'code', 'message' ); return wp_json_encode( $error ); } /** * Gets the encoding options passed to {@see wp_json_encode}. * * @since 6.1.0 * * @param \WP_REST_Request $request The current request object. * * @return int The JSON encode options. */ protected function get_json_encode_options( WP_REST_Request $request ) { $options = 0; if ( $request->has_param( '_pretty' ) ) { $options |= JSON_PRETTY_PRINT; } /** * Filters the JSON encoding options used to send the REST API response. * * @since 6.1.0 * * @param int $options JSON encoding options {@see json_encode()}. * @param WP_REST_Request $request Current request object. */ return apply_filters( 'rest_json_encode_options', $options, $request ); } /** * Handles serving a REST API request. * * Matches the current server URI to a route and runs the first matching * callback then outputs a JSON representation of the returned value. * * @since 4.4.0 * * @see WP_REST_Server::dispatch() * * @global WP_User $current_user The currently authenticated user. * * @param string|null $path Optional. The request route. If not set, `$_SERVER['PATH_INFO']` will be used. * Default null. * @return null|false Null if not served and a HEAD request, false otherwise. */ public function serve_request( $path = null ) { // Refuse to start a fresh top-level REST cycle while another dispatch // is already in flight. Internal sub-requests must use dispatch(). if ( $this->is_dispatching() ) { return false; } /* @var WP_User|null $current_user */ global $current_user; if ( $current_user instanceof WP_User && ! $current_user->exists() ) { /* * If there is no current user authenticated via other means, clear * the cached lack of user, so that an authenticate check can set it * properly. * * This is done because for authentications such as Application * Passwords, we don't want it to be accepted unless the current HTTP * request is a REST API request, which can't always be identified early * enough in evaluation. */ $current_user = null; } /** * Filters whether JSONP is enabled for the REST API. * * @since 4.4.0 * * @param bool $jsonp_enabled Whether JSONP is enabled. Default true. */ $jsonp_enabled = apply_filters( 'rest_jsonp_enabled', true ); $jsonp_callback = false; if ( isset( $_GET['_jsonp'] ) ) { $jsonp_callback = $_GET['_jsonp']; } $content_type = ( $jsonp_callback && $jsonp_enabled ) ? 'application/javascript' : 'application/json'; $this->send_header( 'Content-Type', $content_type . '; charset=' . get_option( 'blog_charset' ) ); $this->send_header( 'X-Robots-Tag', 'noindex' ); $api_root = get_rest_url(); if ( ! empty( $api_root ) ) { $this->send_header( 'Link', '<' . sanitize_url( $api_root ) . '>; rel="https://api.w.org/"' ); } /* * Mitigate possible JSONP Flash attacks. * * https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/ */ $this->send_header( 'X-Content-Type-Options', 'nosniff' ); /** * Filters whether the REST API is enabled. * * @since 4.4.0 * @deprecated 4.7.0 Use the {@see 'rest_authentication_errors'} filter to * restrict access to the REST API. * * @param bool $rest_enabled Whether the REST API is enabled. Default true. */ apply_filters_deprecated( 'rest_enabled', array( true ), '4.7.0', 'rest_authentication_errors', sprintf( /* translators: %s: rest_authentication_errors */ __( 'The REST API can no longer be completely disabled, the %s filter can be used to restrict access to the API, instead.' ), 'rest_authentication_errors' ) ); if ( $jsonp_callback ) { if ( ! $jsonp_enabled ) { echo $this->json_error( 'rest_callback_disabled', __( 'JSONP support is disabled on this site.' ), 400 ); return false; } if ( ! wp_check_jsonp_callback( $jsonp_callback ) ) { echo $this->json_error( 'rest_callback_invalid', __( 'Invalid JSONP callback function.' ), 400 ); return false; } } if ( empty( $path ) ) { $path = $_SERVER['PATH_INFO'] ?? '/'; } $request = new WP_REST_Request( $_SERVER['REQUEST_METHOD'], $path ); $request->set_query_params( wp_unslash( $_GET ) ); $request->set_body_params( wp_unslash( $_POST ) ); $request->set_file_params( $_FILES ); $request->set_headers( $this->get_headers( wp_unslash( $_SERVER ) ) ); $request->set_body( self::get_raw_data() ); /* * HTTP method override for clients that can't use PUT/PATCH/DELETE. First, we check * $_GET['_method']. If that is not set, we check for the HTTP_X_HTTP_METHOD_OVERRIDE * header. */ $method_overridden = false; if ( isset( $_GET['_method'] ) ) { $request->set_method( $_GET['_method'] ); } elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) { $request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ); $method_overridden = true; } $expose_headers = array( 'X-WP-Total', 'X-WP-TotalPages', 'Link' ); /** * Filters the list of response headers that are exposed to REST API CORS requests. * * @since 5.5.0 * @since 6.3.0 The `$request` parameter was added. * * @param string[] $expose_headers The list of response headers to expose. * @param WP_REST_Request $request The request in context. */ $expose_headers = apply_filters( 'rest_exposed_cors_headers', $expose_headers, $request ); $this->send_header( 'Access-Control-Expose-Headers', implode( ', ', $expose_headers ) ); $allow_headers = array( 'Authorization', 'X-WP-Nonce', 'Content-Disposition', 'Content-MD5', 'Content-Type', ); /** * Filters the list of request headers that are allowed for REST API CORS requests. * * The allowed headers are passed to the browser to specify which * headers can be passed to the REST API. By default, we allow the * Content-* headers needed to upload files to the media endpoints. * As well as the Authorization and Nonce headers for allowing authentication. * * @since 5.5.0 * @since 6.3.0 The `$request` parameter was added. * * @param string[] $allow_headers The list of request headers to allow. * @param WP_REST_Request $request The request in context. */ $allow_headers = apply_filters( 'rest_allowed_cors_headers', $allow_headers, $request ); $this->send_header( 'Access-Control-Allow-Headers', implode( ', ', $allow_headers ) ); $result = $this->check_authentication(); if ( ! is_wp_error( $result ) ) { $result = $this->dispatch( $request ); } // Normalize to either WP_Error or WP_REST_Response... $result = rest_ensure_response( $result ); // ...then convert WP_Error across. if ( is_wp_error( $result ) ) { $result = $this->error_to_response( $result ); } /** * Filters the REST API response. * * Allows modification of the response before returning. * * @since 4.4.0 * @since 4.5.0 Applied to embedded responses. * * @param WP_HTTP_Response $result Result to send to the client. Usually a `WP_REST_Response`. * @param WP_REST_Server $server Server instance. * @param WP_REST_Request $request Request used to generate the response. */ $result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $request ); // Wrap the response in an envelope if asked for. if ( isset( $_GET['_envelope'] ) ) { $embed = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false; $result = $this->envelope_response( $result, $embed ); } // Send extra data from response objects. $headers = $result->get_headers(); $this->send_headers( $headers ); $code = $result->get_status(); $this->set_status( $code ); /** * Filters whether to send no-cache headers on a REST API request. * * @since 4.4.0 * @since 6.3.2 Moved the block to catch the filter added on rest_cookie_check_errors() from wp-includes/rest-api.php. * * @param bool $rest_send_nocache_headers Whether to send no-cache headers. */ $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() ); /* * Send no-cache headers if $send_no_cache_headers is true, * OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code. */ if ( $send_no_cache_headers || ( true === $method_overridden && str_starts_with( $code, '4' ) ) ) { foreach ( wp_get_nocache_headers() as $header => $header_value ) { if ( empty( $header_value ) ) { $this->remove_header( $header ); } else { $this->send_header( $header, $header_value ); } } } /** * Filters whether the REST API request has already been served. * * Allow sending the request manually - by returning true, the API result * will not be sent to the client. * * @since 4.4.0 * * @param bool $served Whether the request has already been served. Default false. * @param WP_HTTP_Response $result Result to send to the client. Usually a `WP_REST_Response`. * @param WP_REST_Request $request Request used to generate the response. * @param WP_REST_Server $server Server instance. */ $served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this ); if ( ! $served ) { if ( 'HEAD' === $request->get_method() ) { return null; } // Embed links inside the request. $embed = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false; $result = $this->response_to_data( $result, $embed ); /** * Filters the REST API response. * * Allows modification of the response data after inserting * embedded data (if any) and before echoing the response data. * * @since 4.8.1 * * @param array $result Response data to send to the client. * @param WP_REST_Server $server Server instance. * @param WP_REST_Request $request Request used to generate the response. */ $result = apply_filters( 'rest_pre_echo_response', $result, $this, $request ); // The 204 response shouldn't have a body. if ( 204 === $code || null === $result ) { return null; } $result = wp_json_encode( $result, $this->get_json_encode_options( $request ) ); $json_error_message = $this->get_json_last_error(); if ( $json_error_message ) { $this->set_status( 500 ); $json_error_obj = new WP_Error( 'rest_encode_error', $json_error_message, array( 'status' => 500 ) ); $result = $this->error_to_response( $json_error_obj ); $result = wp_json_encode( $result->data, $this->get_json_encode_options( $request ) ); } if ( $jsonp_callback ) { // Prepend '/**/' to mitigate possible JSONP Flash attacks. // https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/ echo '/**/' . $jsonp_callback . '(' . $result . ')'; } else { echo $result; } } return null; } /** * Converts a response to data to send. * * @since 4.4.0 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include. * * @param WP_REST_Response $response Response object. * @param bool|string[] $embed Whether to embed all links, a filtered list of link relations, or no links. * @return array { * Data with sub-requests embedded. * * @type array $_links Links. * @type array $_embedded Embedded objects. * } */ public function response_to_data( $response, $embed ) { $data = $response->get_data(); $links = self::get_compact_response_links( $response ); if ( ! empty( $links ) ) { // Convert links to part of the data. $data['_links'] = $links; } if ( $embed ) { $this->embed_cache = array(); // Determine if this is a numeric array. if ( wp_is_numeric_array( $data ) ) { foreach ( $data as $key => $item ) { $data[ $key ] = $this->embed_links( $item, $embed ); } } else { $data = $this->embed_links( $data, $embed ); } $this->embed_cache = array(); } return $data; } /** * Retrieves links from a response. * * Extracts the links from a response into a structured hash, suitable for * direct output. * * @since 4.4.0 * * @param WP_REST_Response $response Response to extract links from. * @return array Map of link relation to list of link hashes. */ public static function get_response_links( $response ) { $links = $response->get_links(); if ( empty( $links ) ) { return array(); } // Convert links to part of the data. $data = array(); foreach ( $links as $rel => $items ) { $data[ $rel ] = array(); foreach ( $items as $item ) { $attributes = $item['attributes']; $attributes['href'] = $item['href']; if ( 'self' !== $rel ) { $data[ $rel ][] = $attributes; continue; } $target_hints = self::get_target_hints_for_link( $attributes ); if ( $target_hints ) { $attributes['targetHints'] = $target_hints; } $data[ $rel ][] = $attributes; } } return $data; } /** * Gets the target hints for a REST API Link. * * @since 6.7.0 * * @param array $link The link to get target hints for. * @return array|null */ protected static function get_target_hints_for_link( $link ) { // Prefer targetHints that were specifically designated by the developer. if ( isset( $link['targetHints']['allow'] ) ) { return null; } $request = WP_REST_Request::from_url( $link['href'] ); if ( ! $request ) { return null; } $server = rest_get_server(); $match = $server->match_request_to_handler( $request ); if ( is_wp_error( $match ) ) { return null; } if ( is_wp_error( $request->has_valid_params() ) ) { return null; } if ( is_wp_error( $request->sanitize_params() ) ) { return null; } $target_hints = array(); $response = new WP_REST_Response(); $response->set_matched_route( $match[0] ); $response->set_matched_handler( $match[1] ); $headers = rest_send_allow_header( $response, $server, $request )->get_headers(); foreach ( $headers as $name => $value ) { $name = WP_REST_Request::canonicalize_header_name( $name ); $target_hints[ $name ] = array_map( 'trim', explode( ',', $value ) ); } return $target_hints; } /** * Retrieves the CURIEs (compact URIs) used for relations. * * Extracts the links from a response into a structured hash, suitable for * direct output. * * @since 4.5.0 * * @param WP_REST_Response $response Response to extract links from. * @return array Map of link relation to list of link hashes. */ public static function get_compact_response_links( $response ) { $links = self::get_response_links( $response ); if ( empty( $links ) ) { return array(); } $curies = $response->get_curies(); $used_curies = array(); foreach ( $links as $rel => $items ) { // Convert $rel URIs to their compact versions if they exist. foreach ( $curies as $curie ) { $href_prefix = substr( $curie['href'], 0, strpos( $curie['href'], '{rel}' ) ); if ( ! str_starts_with( $rel, $href_prefix ) ) { continue; } // Relation now changes from '$uri' to '$curie:$relation'. $rel_regex = str_replace( '\{rel\}', '(.+)', preg_quote( $curie['href'], '!' ) ); preg_match( '!' . $rel_regex . '!', $rel, $matches ); if ( $matches ) { $new_rel = $curie['name'] . ':' . $matches[1]; $used_curies[ $curie['name'] ] = $curie; $links[ $new_rel ] = $items; unset( $links[ $rel ] ); break; } } } // Push the curies onto the start of the links array. if ( $used_curies ) { $links['curies'] = array_values( $used_curies ); } return $links; } /** * Embeds the links from the data into the request. * * @since 4.4.0 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include. * * @param array $data Data from the request. * @param bool|string[] $embed Whether to embed all links or a filtered list of link relations. * Default true. * @return array { * Data with sub-requests embedded. * * @type array $_links Links. * @type array $_embedded Embedded objects. * } */ protected function embed_links( $data, $embed = true ) { if ( empty( $data['_links'] ) ) { return $data; } $embedded = array(); foreach ( $data['_links'] as $rel => $links ) { /* * If a list of relations was specified, and the link relation * is not in the list of allowed relations, don't process the link. */ if ( is_array( $embed ) && ! in_array( $rel, $embed, true ) ) { continue; } $embeds = array(); foreach ( $links as $item ) { // Determine if the link is embeddable. if ( empty( $item['embeddable'] ) ) { // Ensure we keep the same order. $embeds[] = array(); continue; } if ( ! array_key_exists( $item['href'], $this->embed_cache ) ) { // Run through our internal routing and serve. $request = WP_REST_Request::from_url( $item['href'] ); if ( ! $request ) { $embeds[] = array(); continue; } // Embedded resources get passed context=embed. if ( empty( $request['context'] ) ) { $request['context'] = 'embed'; } if ( empty( $request['per_page'] ) ) { $matched = $this->match_request_to_handler( $request ); if ( ! is_wp_error( $matched ) && isset( $matched[1]['args']['per_page']['maximum'] ) ) { $request['per_page'] = (int) $matched[1]['args']['per_page']['maximum']; } } $response = $this->dispatch( $request ); /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */ $response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $this, $request ); $this->embed_cache[ $item['href'] ] = $this->response_to_data( $response, false ); } $embeds[] = $this->embed_cache[ $item['href'] ]; } // Determine if any real links were found. $has_links = count( array_filter( $embeds ) ); if ( $has_links ) { $embedded[ $rel ] = $embeds; } } if ( ! empty( $embedded ) ) { $data['_embedded'] = $embedded; } return $data; } /** * Wraps the response in an envelope. * * The enveloping technique is used to work around browser/client * compatibility issues. Essentially, it converts the full HTTP response to * data instead. * * @since 4.4.0 * @since 6.0.0 The `$embed` parameter can now contain a list of link relations to include. * * @param WP_REST_Response $response Response object. * @param bool|string[] $embed Whether to embed all links, a filtered list of link relations, or no links. * @return WP_REST_Response New response with wrapped data */ public function envelope_response( $response, $embed ) { $envelope = array( 'body' => $this->response_to_data( $response, $embed ), 'status' => $response->get_status(), 'headers' => $response->get_headers(), ); /** * Filters the enveloped form of a REST API response. * * @since 4.4.0 * * @param array $envelope { * Envelope data. * * @type array $body Response data. * @type int $status The 3-digit HTTP status code. * @type array $headers Map of header name to header value. * } * @param WP_REST_Response $response Original response data. */ $envelope = apply_filters( 'rest_envelope_response', $envelope, $response ); // Ensure it's still a response and return. return rest_ensure_response( $envelope ); } /** * Registers a route to the server. * * @since 4.4.0 * * @param string $route_namespace Namespace. * @param string $route The REST route. * @param array $route_args Route arguments. * @param bool $override Optional. Whether the route should be overridden if it already exists. * Default false. */ public function register_route( $route_namespace, $route, $route_args, $override = false ) { if ( ! isset( $this->namespaces[ $route_namespace ] ) ) { $this->namespaces[ $route_namespace ] = array(); $this->register_route( $route_namespace, '/' . $route_namespace, array( array( 'methods' => self::READABLE, 'callback' => array( $this, 'get_namespace_index' ), 'args' => array( 'namespace' => array( 'default' => $route_namespace, ), 'context' => array( 'default' => 'view', ), ), ), ) ); } // Associative to avoid double-registration. $this->namespaces[ $route_namespace ][ $route ] = true; $route_args['namespace'] = $route_namespace; if ( $override || empty( $this->endpoints[ $route ] ) ) { $this->endpoints[ $route ] = $route_args; } else { $this->endpoints[ $route ] = array_merge( $this->endpoints[ $route ], $route_args ); } } /** * Retrieves the route map. * * The route map is an associative array with path regexes as the keys. The * value is an indexed array with the callback function/method as the first * item, and a bitmask of HTTP methods as the second item (see the class * constants). * * Each route can be mapped to more than one callback by using an array of * the indexed arrays. This allows mapping e.g. GET requests to one callback * and POST requests to another. * * Note that the path regexes (array keys) must have @ escaped, as this is * used as the delimiter with preg_match() * * @since 4.4.0 * @since 5.4.0 Added `$route_namespace` parameter. * * @param string $route_namespace Optionally, only return routes in the given namespace. * @return array `'/path/regex' => array( $callback, $bitmask )` or * `'/path/regex' => array( array( $callback, $bitmask ), ...)`. */ public function get_routes( $route_namespace = '' ) { $endpoints = $this->endpoints; if ( $route_namespace ) { $endpoints = wp_list_filter( $endpoints, array( 'namespace' => $route_namespace ) ); } /** * Filters the array of available REST API endpoints. * * @since 4.4.0 * * @param array $endpoints The available endpoints. An array of matching regex patterns, each mapped * to an array of callbacks for the endpoint. These take the format * `'/path/regex' => array( $callback, $bitmask )` or * `'/path/regex' => array( array( $callback, $bitmask ). */ $endpoints = apply_filters( 'rest_endpoints', $endpoints ); // Normalize the endpoints. $defaults = array( 'methods' => '', 'accept_json' => false, 'accept_raw' => false, 'show_in_index' => true, 'args' => array(), ); foreach ( $endpoints as $route => &$handlers ) { if ( isset( $handlers['callback'] ) ) { // Single endpoint, add one deeper. $handlers = array( $handlers ); } if ( ! isset( $this->route_options[ $route ] ) ) { $this->route_options[ $route ] = array(); } foreach ( $handlers as $key => &$handler ) { if ( ! is_numeric( $key ) ) { // Route option, move it to the options. $this->route_options[ $route ][ $key ] = $handler; unset( $handlers[ $key ] ); continue; } $handler = wp_parse_args( $handler, $defaults ); // Allow comma-separated HTTP methods. if ( is_string( $handler['methods'] ) ) { $methods = explode( ',', $handler['methods'] ); } elseif ( is_array( $handler['methods'] ) ) { $methods = $handler['methods']; } else { $methods = array(); } $handler['methods'] = array(); foreach ( $methods as $method ) { $method = strtoupper( trim( $method ) ); $handler['methods'][ $method ] = true; } } } return $endpoints; } /** * Retrieves namespaces registered on the server. * * @since 4.4.0 * * @return string[] List of registered namespaces. */ public function get_namespaces() { return array_keys( $this->namespaces ); } /** * Retrieves specified options for a route. * * @since 4.4.0 * * @param string $route Route pattern to fetch options for. * @return array|null Data as an associative array if found, or null if not found. */ public function get_route_options( $route ) { if ( ! isset( $this->route_options[ $route ] ) ) { return null; } return $this->route_options[ $route ]; } /** * Matches the request to a callback and call it. * * @since 4.4.0 * * @param WP_REST_Request $request Request to attempt dispatching. * @return WP_REST_Response Response returned by the callback. */ public function dispatch( $request ) { $this->dispatching_requests[] = $request; /** * Filters the pre-calculated result of a REST API dispatch request. * * Allow hijacking the request before dispatching by returning a non-empty. The returned value * will be used to serve the request instead. * * @since 4.4.0 * * @param mixed $result Response to replace the requested version with. Can be anything * a normal endpoint can return, or null to not hijack the request. * @param WP_REST_Server $server Server instance. * @param WP_REST_Request $request Request used to generate the response. */ $result = apply_filters( 'rest_pre_dispatch', null, $this, $request ); if ( ! empty( $result ) ) { // Normalize to either WP_Error or WP_REST_Response... $result = rest_ensure_response( $result ); // ...then convert WP_Error across. if ( is_wp_error( $result ) ) { $result = $this->error_to_response( $result ); } array_pop( $this->dispatching_requests ); return $result; } $error = null; $matched = $this->match_request_to_handler( $request ); if ( is_wp_error( $matched ) ) { $response = $this->error_to_response( $matched ); array_pop( $this->dispatching_requests ); return $response; } list( $route, $handler ) = $matched; if ( ! is_callable( $handler['callback'] ) ) { $error = new WP_Error( 'rest_invalid_handler', __( 'The handler for the route is invalid.' ), array( 'status' => 500 ) ); } if ( ! is_wp_error( $error ) ) { $check_required = $request->has_valid_params(); if ( is_wp_error( $check_required ) ) { $error = $check_required; } else { $check_sanitized = $request->sanitize_params(); if ( is_wp_error( $check_sanitized ) ) { $error = $check_sanitized; } } } $response = $this->respond_to_request( $request, $route, $handler, $error ); array_pop( $this->dispatching_requests ); return $response; } /** * Returns whether the REST server is currently dispatching / responding to a request. * * This may be a standalone REST API request, or an internal request dispatched from within a regular page load. * * @since 6.5.0 * * @return bool Whether the REST server is currently handling a request. */ public function is_dispatching() { return (bool) $this->dispatching_requests; } /** * Matches a request object to its handler. * * @access private * @since 5.6.0 * * @param WP_REST_Request $request The request object. * @return array|WP_Error The route and request handler on success or a WP_Error instance if no handler was found. */ protected function match_request_to_handler( $request ) { $method = $request->get_method(); $path = $request->get_route(); $with_namespace = array(); foreach ( $this->get_namespaces() as $namespace ) { if ( str_starts_with( trailingslashit( ltrim( $path, '/' ) ), $namespace ) ) { $with_namespace[] = $this->get_routes( $namespace ); } } if ( $with_namespace ) { $routes = array_merge( ...$with_namespace ); } else { $routes = $this->get_routes(); } foreach ( $routes as $route => $handlers ) { $match = preg_match( '@^' . $route . '$@i', $path, $matches ); if ( ! $match ) { continue; } $args = array(); foreach ( $matches as $param => $value ) { if ( ! is_int( $param ) ) { $args[ $param ] = $value; } } foreach ( $handlers as $handler ) { $callback = $handler['callback']; // Fallback to GET method if no HEAD method is registered. $checked_method = $method; if ( 'HEAD' === $method && empty( $handler['methods']['HEAD'] ) ) { $checked_method = 'GET'; } if ( empty( $handler['methods'][ $checked_method ] ) ) { continue; } if ( ! is_callable( $callback ) ) { return array( $route, $handler ); } $request->set_url_params( $args ); $request->set_attributes( $handler ); $defaults = array(); foreach ( $handler['args'] as $arg => $options ) { if ( isset( $options['default'] ) ) { $defaults[ $arg ] = $options['default']; } } $request->set_default_params( $defaults ); return array( $route, $handler ); } } return new WP_Error( 'rest_no_route', __( 'No route was found matching the URL and request method.' ), array( 'status' => 404 ) ); } /** * Dispatches the request to the callback handler. * * @access private * @since 5.6.0 * * @param WP_REST_Request $request The request object. * @param string $route The matched route regex. * @param array $handler The matched route handler. * @param WP_Error|null $response The current error object if any. * @return WP_REST_Response */ protected function respond_to_request( $request, $route, $handler, $response ) { /** * Filters the response before executing any REST API callbacks. * * Allows plugins to perform additional validation after a * request is initialized and matched to a registered route, * but before it is executed. * * Note that this filter will not be called for requests that * fail to authenticate or match to a registered route. * * @since 4.7.0 * * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client. * Usually a WP_REST_Response or WP_Error. * @param array $handler Route handler used for the request. * @param WP_REST_Request $request Request used to generate the response. */ $response = apply_filters( 'rest_request_before_callbacks', $response, $handler, $request ); // Check permission specified on the route. if ( ! is_wp_error( $response ) && ! empty( $handler['permission_callback'] ) ) { $permission = call_user_func( $handler['permission_callback'], $request ); if ( is_wp_error( $permission ) ) { $response = $permission; } elseif ( false === $permission || null === $permission ) { $response = new WP_Error( 'rest_forbidden', __( 'Sorry, you are not allowed to do that.' ), array( 'status' => rest_authorization_required_code() ) ); } } if ( ! is_wp_error( $response ) ) { /** * Filters the REST API dispatch request result. * * Allow plugins to override dispatching the request. * * @since 4.4.0 * @since 4.5.0 Added `$route` and `$handler` parameters. * * @param mixed $dispatch_result Dispatch result, will be used if not empty. * @param WP_REST_Request $request Request used to generate the response. * @param string $route Route matched for the request. * @param array $handler Route handler used for the request. */ $dispatch_result = apply_filters( 'rest_dispatch_request', null, $request, $route, $handler ); // Allow plugins to halt the request via this filter. if ( null !== $dispatch_result ) { $response = $dispatch_result; } else { $response = call_user_func( $handler['callback'], $request ); } } /** * Filters the response immediately after executing any REST API * callbacks. * * Allows plugins to perform any needed cleanup, for example, * to undo changes made during the {@see 'rest_request_before_callbacks'} * filter. * * Note that this filter will not be called for requests that * fail to authenticate or match to a registered route. * * Note that an endpoint's `permission_callback` can still be * called after this filter - see `rest_send_allow_header()`. * * @since 4.7.0 * * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client. * Usually a WP_REST_Response or WP_Error. * @param array $handler Route handler used for the request. * @param WP_REST_Request $request Request used to generate the response. */ $response = apply_filters( 'rest_request_after_callbacks', $response, $handler, $request ); if ( is_wp_error( $response ) ) { $response = $this->error_to_response( $response ); } else { $response = rest_ensure_response( $response ); } $response->set_matched_route( $route ); $response->set_matched_handler( $handler ); return $response; } /** * Returns if an error occurred during most recent JSON encode/decode. * * Strings to be translated will be in format like * "Encoding error: Maximum stack depth exceeded". * * @since 4.4.0 * * @return false|string Boolean false or string error message. */ protected function get_json_last_error() { if ( JSON_ERROR_NONE === json_last_error() ) { return false; } return json_last_error_msg(); } /** * Retrieves the site index. * * This endpoint describes the capabilities of the site. * * @since 4.4.0 * * @param WP_REST_Request $request Request data. * @return WP_REST_Response The API root index data. */ public function get_index( $request ) { // General site data. $available = array( 'name' => get_option( 'blogname' ), 'description' => get_option( 'blogdescription' ), 'url' => get_option( 'siteurl' ), 'home' => home_url(), 'gmt_offset' => get_option( 'gmt_offset' ), 'timezone_string' => get_option( 'timezone_string' ), 'page_for_posts' => (int) get_option( 'page_for_posts' ), 'page_on_front' => (int) get_option( 'page_on_front' ), 'show_on_front' => get_option( 'show_on_front' ), 'namespaces' => array_keys( $this->namespaces ), 'authentication' => array(), 'routes' => $this->get_data_for_routes( $this->get_routes(), $request['context'] ), ); // Add media processing settings for users who can upload files. if ( wp_is_client_side_media_processing_enabled() && current_user_can( 'upload_files' ) ) { // Image sizes keyed by name for client-side media processing. $available['image_sizes'] = array(); foreach ( wp_get_registered_image_subsizes() as $name => $size ) { $available['image_sizes'][ $name ] = $size; } /** This filter is documented in wp-admin/includes/image.php */ $available['image_size_threshold'] = (int) apply_filters( 'big_image_size_threshold', 2560, array( 0, 0 ), '', 0 ); /** This filter is documented in wp-includes/class-wp-image-editor-imagick.php */ $available['image_strip_meta'] = (bool) apply_filters( 'image_strip_meta', true ); /* * On the server, this filter receives the decoded image's actual bit depth. * The client path never decodes the image on the server, so the filter is * applied with 16 (the maximum depth the client encoder can produce) as * both the value and the current depth. The client caps its output bit * depth at the filtered value, so a plugin lowering it (e.g. to 8) takes * effect on client-generated images too. */ /** This filter is documented in wp-includes/class-wp-image-editor-imagick.php */ $available['image_max_bit_depth'] = (int) apply_filters( 'image_max_bit_depth', 16, 16 ); } $response = new WP_REST_Response( $available ); $fields = $request['_fields'] ?? ''; $fields = wp_parse_list( $fields ); if ( empty( $fields ) ) { $fields[] = '_links'; } if ( $request->has_param( '_embed' ) ) { $fields[] = '_embedded'; } if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_link( 'help', 'https://developer.wordpress.org/rest-api/' ); $this->add_active_theme_link_to_index( $response ); $this->add_site_logo_to_index( $response ); $this->add_site_icon_to_index( $response ); } else { if ( rest_is_field_included( 'site_logo', $fields ) ) { $this->add_site_logo_to_index( $response ); } if ( rest_is_field_included( 'site_icon', $fields ) || rest_is_field_included( 'site_icon_url', $fields ) ) { $this->add_site_icon_to_index( $response ); } } /** * Filters the REST API root index data. * * This contains the data describing the API. This includes information * about supported authentication schemes, supported namespaces, routes * available on the API, and a small amount of data about the site. * * @since 4.4.0 * @since 6.0.0 Added `$request` parameter. * * @param WP_REST_Response $response Response data. * @param WP_REST_Request $request Request data. */ return apply_filters( 'rest_index', $response, $request ); } /** * Adds a link to the active theme for users who have proper permissions. * * @since 5.7.0 * * @param WP_REST_Response $response REST API response. */ protected function add_active_theme_link_to_index( WP_REST_Response $response ) { $should_add = current_user_can( 'switch_themes' ) || current_user_can( 'manage_network_themes' ); if ( ! $should_add && current_user_can( 'edit_posts' ) ) { $should_add = true; } if ( ! $should_add ) { foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { $should_add = true; break; } } } if ( $should_add ) { $theme = wp_get_theme(); $response->add_link( 'https://api.w.org/active-theme', rest_url( 'wp/v2/themes/' . $theme->get_stylesheet() ) ); } } /** * Exposes the site logo through the WordPress REST API. * * This is used for fetching this information when user has no rights * to update settings. * * @since 5.8.0 * * @param WP_REST_Response $response REST API response. */ protected function add_site_logo_to_index( WP_REST_Response $response ) { $site_logo_id = get_theme_mod( 'custom_logo', 0 ); $this->add_image_to_index( $response, $site_logo_id, 'site_logo' ); } /** * Exposes the site icon through the WordPress REST API. * * This is used for fetching this information when user has no rights * to update settings. * * @since 5.9.0 * * @param WP_REST_Response $response REST API response. */ protected function add_site_icon_to_index( WP_REST_Response $response ) { $site_icon_id = get_option( 'site_icon', 0 ); $this->add_image_to_index( $response, $site_icon_id, 'site_icon' ); $response->data['site_icon_url'] = get_site_icon_url(); } /** * Exposes an image through the WordPress REST API. * This is used for fetching this information when user has no rights * to update settings. * * @since 5.9.0 * * @param WP_REST_Response $response REST API response. * @param int $image_id Image attachment ID. * @param string $type Type of Image. */ protected function add_image_to_index( WP_REST_Response $response, $image_id, $type ) { $response->data[ $type ] = (int) $image_id; if ( $image_id ) { $response->add_link( 'https://api.w.org/featuredmedia', rest_url( rest_get_route_for_post( $image_id ) ), array( 'embeddable' => true, 'type' => $type, ) ); } } /** * Retrieves the index for a namespace. * * @since 4.4.0 * * @param WP_REST_Request $request REST request instance. * @return WP_REST_Response|WP_Error WP_REST_Response instance if the index was found, * WP_Error if the namespace isn't set. */ public function get_namespace_index( $request ) { $namespace = $request['namespace']; if ( ! isset( $this->namespaces[ $namespace ] ) ) { return new WP_Error( 'rest_invalid_namespace', __( 'The specified namespace could not be found.' ), array( 'status' => 404 ) ); } $routes = $this->namespaces[ $namespace ]; $endpoints = array_intersect_key( $this->get_routes(), $routes ); $data = array( 'namespace' => $namespace, 'routes' => $this->get_data_for_routes( $endpoints, $request['context'] ), ); $response = rest_ensure_response( $data ); // Link to the root index. $response->add_link( 'up', rest_url( '/' ) ); /** * Filters the REST API namespace index data. * * This typically is just the route data for the namespace, but you can * add any data you'd like here. * * @since 4.4.0 * * @param WP_REST_Response $response Response data. * @param WP_REST_Request $request Request data. The namespace is passed as the 'namespace' parameter. */ return apply_filters( 'rest_namespace_index', $response, $request ); } /** * Retrieves the publicly-visible data for routes. * * @since 4.4.0 * * @param array $routes Routes to get data for. * @param string $context Optional. Context for data. Accepts 'view' or 'help'. Default 'view'. * @return array[] Route data to expose in indexes, keyed by route. */ public function get_data_for_routes( $routes, $context = 'view' ) { $available = array(); // Find the available routes. foreach ( $routes as $route => $callbacks ) { $data = $this->get_data_for_route( $route, $callbacks, $context ); if ( empty( $data ) ) { continue; } /** * Filters the publicly-visible data for a single REST API route. * * @since 4.4.0 * * @param array $data Publicly-visible data for the route. */ $available[ $route ] = apply_filters( 'rest_endpoints_description', $data ); } /** * Filters the publicly-visible data for REST API routes. * * This data is exposed on indexes and can be used by clients or * developers to investigate the site and find out how to use it. It * acts as a form of self-documentation. * * @since 4.4.0 * * @param array[] $available Route data to expose in indexes, keyed by route. * @param array $routes Internal route data as an associative array. */ return apply_filters( 'rest_route_data', $available, $routes ); } /** * Retrieves publicly-visible data for the route. * * @since 4.4.0 * * @param string $route Route to get data for. * @param array $callbacks Callbacks to convert to data. * @param string $context Optional. Context for the data. Accepts 'view' or 'help'. Default 'view'. * @return array|null Data for the route, or null if no publicly-visible data. */ public function get_data_for_route( $route, $callbacks, $context = 'view' ) { $data = array( 'namespace' => '', 'methods' => array(), 'endpoints' => array(), ); $allow_batch = false; if ( isset( $this->route_options[ $route ] ) ) { $options = $this->route_options[ $route ]; if ( isset( $options['namespace'] ) ) { $data['namespace'] = $options['namespace']; } $allow_batch = $options['allow_batch'] ?? false; if ( isset( $options['schema'] ) && 'help' === $context ) { $data['schema'] = call_user_func( $options['schema'] ); } } $allowed_schema_keywords = array_flip( wp_get_json_schema_allowed_keywords( 'rest-api' ) ); $route = preg_replace( '#\(\?P<(\w+?)>.*?\)#', '{$1}', $route ); foreach ( $callbacks as $callback ) { // Skip to the next route if any callback is hidden. if ( empty( $callback['show_in_index'] ) ) { continue; } $data['methods'] = array_merge( $data['methods'], array_keys( $callback['methods'] ) ); $endpoint_data = array( 'methods' => array_keys( $callback['methods'] ), ); $callback_batch = $callback['allow_batch'] ?? $allow_batch; if ( $callback_batch ) { $endpoint_data['allow_batch'] = $callback_batch; } if ( isset( $callback['args'] ) ) { $endpoint_data['args'] = array(); foreach ( $callback['args'] as $key => $opts ) { if ( is_string( $opts ) ) { $opts = array( $opts => 0 ); } elseif ( ! is_array( $opts ) ) { $opts = array(); } $arg_data = array_intersect_key( $opts, $allowed_schema_keywords ); $arg_data['required'] = ! empty( $opts['required'] ); $endpoint_data['args'][ $key ] = $arg_data; } } $data['endpoints'][] = $endpoint_data; // For non-variable routes, generate links. if ( ! str_contains( $route, '{' ) ) { $data['_links'] = array( 'self' => array( array( 'href' => rest_url( $route ), ), ), ); } } if ( empty( $data['methods'] ) ) { // No methods supported, hide the route. return null; } return $data; } /** * Gets the maximum number of requests that can be included in a batch. * * @since 5.6.0 * * @return int The maximum requests. */ protected function get_max_batch_size() { /** * Filters the maximum number of REST API requests that can be included in a batch. * * @since 5.6.0 * * @param int $max_size The maximum size. */ return apply_filters( 'rest_get_max_batch_size', 25 ); } /** * Serves the batch/v1 request. * * @since 5.6.0 * * @param WP_REST_Request $batch_request The batch request object. * @return WP_REST_Response The generated response object. */ public function serve_batch_request_v1( WP_REST_Request $batch_request ) { $requests = array(); foreach ( $batch_request['requests'] as $args ) { $parsed_url = wp_parse_url( $args['path'] ); if ( false === $parsed_url ) { $requests[] = new WP_Error( 'parse_path_failed', __( 'Could not parse the path.' ), array( 'status' => 400 ) ); continue; } $single_request = new WP_REST_Request( $args['method'] ?? 'POST', $parsed_url['path'] ); if ( ! empty( $parsed_url['query'] ) ) { $query_args = array(); wp_parse_str( $parsed_url['query'], $query_args ); $single_request->set_query_params( $query_args ); } if ( ! empty( $args['body'] ) ) { $single_request->set_body_params( $args['body'] ); } if ( ! empty( $args['headers'] ) ) { $single_request->set_headers( $args['headers'] ); } $requests[] = $single_request; } $matches = array(); $validation = array(); $has_error = false; foreach ( $requests as $single_request ) { if ( is_wp_error( $single_request ) ) { $has_error = true; $matches[] = $single_request; $validation[] = $single_request; continue; } $match = $this->match_request_to_handler( $single_request ); $matches[] = $match; $error = null; if ( is_wp_error( $match ) ) { $error = $match; } if ( ! $error ) { list( $route, $handler ) = $match; if ( isset( $handler['allow_batch'] ) ) { $allow_batch = $handler['allow_batch']; } else { $route_options = $this->get_route_options( $route ); $allow_batch = $route_options['allow_batch'] ?? false; } if ( ! is_array( $allow_batch ) || empty( $allow_batch['v1'] ) ) { $error = new WP_Error( 'rest_batch_not_allowed', __( 'The requested route does not support batch requests.' ), array( 'status' => 400 ) ); } } if ( ! $error ) { $check_required = $single_request->has_valid_params(); if ( is_wp_error( $check_required ) ) { $error = $check_required; } } if ( ! $error ) { $check_sanitized = $single_request->sanitize_params(); if ( is_wp_error( $check_sanitized ) ) { $error = $check_sanitized; } } if ( $error ) { $has_error = true; $validation[] = $error; } else { $validation[] = true; } } $responses = array(); if ( $has_error && 'require-all-validate' === $batch_request['validation'] ) { foreach ( $validation as $valid ) { if ( is_wp_error( $valid ) ) { $responses[] = $this->envelope_response( $this->error_to_response( $valid ), false )->get_data(); } else { $responses[] = null; } } return new WP_REST_Response( array( 'failed' => 'validation', 'responses' => $responses, ), WP_Http::MULTI_STATUS ); } foreach ( $requests as $i => $single_request ) { if ( is_wp_error( $single_request ) ) { $result = $this->error_to_response( $single_request ); $responses[] = $this->envelope_response( $result, false )->get_data(); continue; } $clean_request = clone $single_request; $clean_request->set_url_params( array() ); $clean_request->set_attributes( array() ); $clean_request->set_default_params( array() ); /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */ $result = apply_filters( 'rest_pre_dispatch', null, $this, $clean_request ); if ( empty( $result ) ) { $match = $matches[ $i ]; $error = null; if ( is_wp_error( $validation[ $i ] ) ) { $error = $validation[ $i ]; } if ( is_wp_error( $match ) ) { $result = $this->error_to_response( $match ); } else { list( $route, $handler ) = $match; if ( ! $error && ! is_callable( $handler['callback'] ) ) { $error = new WP_Error( 'rest_invalid_handler', __( 'The handler for the route is invalid' ), array( 'status' => 500 ) ); } $result = $this->respond_to_request( $single_request, $route, $handler, $error ); } } /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */ $result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $single_request ); $responses[] = $this->envelope_response( $result, false )->get_data(); } return new WP_REST_Response( array( 'responses' => $responses ), WP_Http::MULTI_STATUS ); } /** * Sends an HTTP status code. * * @since 4.4.0 * * @param int $code HTTP status. */ protected function set_status( $code ) { status_header( $code ); } /** * Sends an HTTP header. * * @since 4.4.0 * * @param string $key Header key. * @param string $value Header value. */ public function send_header( $key, $value ) { /* * Sanitize as per RFC2616 (Section 4.2): * * Any LWS that occurs between field-content MAY be replaced with a * single SP before interpreting the field value or forwarding the * message downstream. */ $value = preg_replace( '/\s+/', ' ', $value ); header( sprintf( '%s: %s', $key, $value ) ); } /** * Sends multiple HTTP headers. * * @since 4.4.0 * * @param array $headers Map of header name to header value. */ public function send_headers( $headers ) { foreach ( $headers as $key => $value ) { $this->send_header( $key, $value ); } } /** * Removes an HTTP header from the current response. * * @since 4.8.0 * * @param string $key Header key. */ public function remove_header( $key ) { header_remove( $key ); } /** * Retrieves the raw request entity (body). * * @since 4.4.0 * * @global string $HTTP_RAW_POST_DATA Raw post data. * * @return string Raw request data. */ public static function get_raw_data() { // phpcs:disable PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved global $HTTP_RAW_POST_DATA; // $HTTP_RAW_POST_DATA was deprecated in PHP 5.6 and removed in PHP 7.0. if ( ! isset( $HTTP_RAW_POST_DATA ) ) { $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' ); } return $HTTP_RAW_POST_DATA; // phpcs:enable } /** * Extracts headers from a PHP-style $_SERVER array. * * @since 4.4.0 * * @param array $server Associative array similar to `$_SERVER`. * @return array Headers extracted from the input. */ public function get_headers( $server ) { $headers = array(); // CONTENT_* headers are not prefixed with HTTP_. $additional = array( 'CONTENT_LENGTH' => true, 'CONTENT_MD5' => true, 'CONTENT_TYPE' => true, ); foreach ( $server as $key => $value ) { if ( str_starts_with( $key, 'HTTP_' ) ) { $headers[ substr( $key, 5 ) ] = $value; } elseif ( 'REDIRECT_HTTP_AUTHORIZATION' === $key && empty( $server['HTTP_AUTHORIZATION'] ) ) { /* * In some server configurations, the authorization header is passed in this alternate location. * Since it would not be passed in both places we do not check for both headers and resolve. */ $headers['AUTHORIZATION'] = $value; } elseif ( isset( $additional[ $key ] ) ) { $headers[ $key ] = $value; } } return $headers; } } IED | ZIRAN Comunicación https://www.ziran.es Comunicación Estratégica Mon, 25 May 2020 09:22:38 +0000 es hourly 1 https://wordpress.org/?v=7.1 https://www.ziran.es/wp-content/uploads/2020/07/favicon.svg IED | ZIRAN Comunicación https://www.ziran.es 32 32 Productos y servicios digitales. Una historia de amor «phygital»- charla gratuita en IED Madrid Virtual 26 mayo https://www.ziran.es/nota_prensa/productos-y-servicios-digitales-una-historia-de-amor-phygital-charla-gratuita-en-ied-madrid-virtual-26-mayo/ Mon, 25 May 2020 09:22:38 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8420 Charlas sobre productos y servicios digitales, en IED Madrid virtual 26 de mayo   El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management Inscripción gratuita aquí   IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez con una charla dedicada al […]

La entrada Productos y servicios digitales. Una historia de amor «phygital»- charla gratuita en IED Madrid Virtual 26 mayo apareció primero en ZIRAN Comunicación.]]>
Charlas sobre productos y servicios digitales, en IED Madrid virtual

26 de mayo

 

El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management

Inscripción gratuita aquí

 

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez con una charla dedicada al mundo de los servicios y productos enteramente digitales.

 

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño.

 

26 de mayo, 18:30h: Productos y servicios digitales. Una historia de amor phygital.

 

Hay datos que dicen que los españoles pasan una media de 61h a la semana delante de un teléfono móvil, trabajan 40 horas o más delante de un ordenador y que cuando llegan a casa ven televisión a través de servicios digitales entre 1 y 15h a la semana. La vida moderna es digital, y considerando el cambio vital catalizado por el confinamiento del Covid-19, los productos y servicios digitales cada vez tienen más trascendencia en nuestra forma de vivir y trabajar, siendo necesaria la existencia de profesionales preparados que ayuden a construir una sociedad más humana a través de la tecnología.

La charla estará a cargo de Juan Martino, diseñador estratégico en OpenSC, una start-up con una plataforma digital que se dedica a mejorar la transparencia y sostenibilidad de las cadenas de suministro con la tecnología más puntera (blockchain, IoT, AI o machine learning), y fiel defensor del diseño como herramienta para transformar el mundo de desde una visión holística.

 

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

 

 

 

Inscripción gratuita aquí

(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)

https://iedmadrid.com/especiales/eventos-online/

 

 

 

Sobre IED Madrid

 

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.

El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

 

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.

El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

 

www.iedmadrid.com

La entrada Productos y servicios digitales. Una historia de amor «phygital»- charla gratuita en IED Madrid Virtual 26 mayo apareció primero en ZIRAN Comunicación.]]>
Charlas sobre moda en IED Madrid Virtual – semana 25 de mayo https://www.ziran.es/nota_prensa/charlas-sobre-moda-en-ied-madrid-virtual-semana-25-de-mayo/ Fri, 22 May 2020 11:36:24 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8413 El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management Inscripción gratuita aquí IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como el uso de los medios creativos al servicio de la fotografía de moda, o los nuevos […]

La entrada Charlas sobre moda en IED Madrid Virtual – semana 25 de mayo apareció primero en ZIRAN Comunicación.]]>
El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management

Inscripción gratuita
aquí

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como el uso de los medios creativos al servicio de la fotografía de moda, o los nuevos materiales para la confección de prendas.

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 25 de mayo

25 de mayo, 18,30h: El uso de los medios creativos en el sector de la fotografía de moda
El fotógrafo Vincent Urbani hará un análisis de los medios de producción fotográfica alternativa en el campo de la fotografía de moda. La introducción de los móviles, cámaras 360º, webcam, GoPro, FaceTime, drones y Apps fotográficas para la creación de fotos y videos de moda, ha dado un nuevo giro creativo a este sector. Urbani, fotógrafo y video maker está especializado en retrato, fotografía de moda y publicidad. Desde 2009 ha publicado sus editoriales de moda y retratos de artistas del mundo del cine y de la musica en numerosas revistas internacionales como The New York Magazine, Interview Alemania, Schön! Magazine UK y Neo2. Ha realizado campañas de publicidad y advertorials para brands de moda y cosmética como Louis Vuitton, Levi’s, Nike, Zalando, Olay y Wella Italy.

27 de mayo, 18,30h: Nuevas materialidades en moda
El hombre lleva miles de años cubriéndonos con distintas envolventes que llamamos moda. En la época actual resulta cada vez más necesario experimentar con nuevos materiales y explorar otras expresiones para la moda. En esta sesión, Raquel Buj, co-fundadora de la marca de moda experimental ZAP&BUJ fashion and architecture, dedicada a la intersección entre moda, arte, arquitectura y tecnología a través de la experimentación con nuevos materiales y herramientas digitales, hablará sobre las nuevas materialidades en la moda a través de ejemplos de trabajos realizados dentro y fuera de su taller.

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

Inscripción gratuita aquí
(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)
https://iedmadrid.com/especiales/eventos-online/

 

Bajar imágenes

Sobre IED Madrid

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.
El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.
El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

www.iedmadrid.com

La entrada Charlas sobre moda en IED Madrid Virtual – semana 25 de mayo apareció primero en ZIRAN Comunicación.]]>
Confluencias estéticas entre arte y moda, filtros para Instagram y más, en la programación virtual de IED Madrid para esta semana https://www.ziran.es/nota_prensa/confluencias-esteticas-entre-arte-y-moda-filtros-para-instagram-y-mas-en-la-programacion-virtual-de-ied-madrid-para-esta-semana/ Mon, 18 May 2020 11:46:22 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8388 Confluencias estéticas entre arte y moda, filtros AR para Instagram y Facebook, y diseño biomimético, -programación virtual y gratuita de IED Madrid para la semana del 18 de mayo-   IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como las confluencias estéticas entre arte y moda, […]

La entrada Confluencias estéticas entre arte y moda, filtros para Instagram y más, en la programación virtual de IED Madrid para esta semana apareció primero en ZIRAN Comunicación.]]>
Confluencias estéticas entre arte y moda, filtros AR para Instagram y Facebook, y diseño biomimético,
-programación virtual y gratuita de IED Madrid para la semana del 18 de mayo-

 

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como las confluencias estéticas entre arte y moda, la creación de filtros AR para Instagram y Facebook, o los diseños presentes en la naturaleza y su aplicación biomimética.

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 18 al 22 de mayo

18 de mayo 18:30h: Arte y moda: confluencias estéticas
Rosa Moreno Laorga, docente de Sociología de la moda y Arte y moda, en IED Madrid, hablará sobre la concepción de la moda como arte, un debate abierto y con numerosas lecturas y opiniones. Actualmente las exposiciones de moda acaparan las salas de los grandes museos cosechando un gran éxito entre crítica y público, pues la moda y el arte son dos disciplinas que se retroalimentan dando lugar a resultados sorprendentes y estimulantes. En su charla dará a diseñadores que trabajan desde procesos artísticos y a artistas que se sirven del lenguaje de la moda para llevar a cabo su obra.

21 de mayo 18:30h: Crea tus propios filtros de Realidad Aumentada para Instagram y Facebook (Introducción a Spark AR)
Una clase donde aprender a realizar filtros propios de realidad aumentada, gracias a la plataforma de Facebook SparkAR, de la mano de la artista visual y docente de tecnología e interactividad en IED Madrid, Elena Juárez.

22 de mayo 18:30h: Biomímesis. Diseños innovadores inspirados en la naturaleza
Una charla en la que descubrir la naturaleza como fuente de inspiración para soluciones de diseño innovadoras, y conocer más sobre las sorprendentes estrategias que se encuentran en el medio natural para resolver desafíos de diseño.

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

Inscripción gratuita aquí
(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)
https://iedmadrid.com/especiales/eventos-online/

 

Puedes bajar las imágenes aquí

La entrada Confluencias estéticas entre arte y moda, filtros para Instagram y más, en la programación virtual de IED Madrid para esta semana apareció primero en ZIRAN Comunicación.]]>
El IED apuesta con Future Innovation Tailor-Made School por la formación a medida para empresas e instituciones para afrontar los nuevos escenarios post-COVID-19 https://www.ziran.es/nota_prensa/el-ied-apuesta-con-future-innovation-tailor-made-school-por-la-formacion-a-medida-para-empresas-e-instituciones-para-afrontar-los-nuevos-escenarios-post-covid-19/ Wed, 13 May 2020 11:28:31 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8353 El nuevo contexto reta a las empresas a redefinirse y el diseño emerge como una herramienta clave para fomentar la innovación   Future Innovation Tailor-Made School (FITS) es la primera escuela compartida entre Madrid y Barcelona de formación personalizada y a medida   El IED Escuela Superior de Diseño presenta Future Innovation Tailor-Made School (FITS), […]

La entrada El IED apuesta con Future Innovation Tailor-Made School por la formación a medida para empresas e instituciones para afrontar los nuevos escenarios post-COVID-19 apareció primero en ZIRAN Comunicación.]]>
El nuevo contexto reta a las empresas a redefinirse y el diseño emerge como una herramienta clave para fomentar la innovación

 

Future Innovation Tailor-Made School (FITS) es la primera escuela compartida entre Madrid y Barcelona de formación personalizada y a medida

 

El IED Escuela Superior de Diseño presenta Future Innovation Tailor-Made School (FITS), una escuela de formación a medida con más de 40 profesionales que ejercen de docentes para empresas, instituciones y universidades en un proceso de transformación a través del diseño. Con el nuevo contexto post-Covid-19, que afectará a diferentes sectores de la sociedad, el diseño emerge como herramienta clave para generar innovación, respondiendo a las nuevas necesidades, concibiendo maneras alternativas de liderazgo y reformulando servicios, productos o estrategias.

 

FITS incorpora metodologías creativas e innovadoras para dar respuesta a las nuevas realidades educativas y a los retos culturales, sociales, políticos y tecnológicos del mundo globalizado en una época de importantes transformaciones. Ideada para dar solución a la necesidad de las organizaciones en constante actualización, es la primera escuela compartida entre las sedes de Madrid y Barcelona, dinamizando así, el cambiante y competitivo entorno empresarial. Las áreas sobre las que trabaja son las mismas que ofrece el IED: Moda, Diseño, Visual Communication y Management Creativo. FITS trata sectores tan diferentes como el retail, la moda, la sanidad, el diseño de transportes, el food design, la comunicación de marca, o los seguros y ha desarrollado proyectos en ámbito nacional e internacional como Colombia, Brasil o China.

 

DESAFÍOS DE LOS NUEVOS ESCENARIOS

 

En este tipo de formación los docentes adquieren un papel todavía más destacado, y especialmente en épocas de grandes cambios como la que tendremos que afrontar y aprender a gestionar en la futura etapa post-Covid-19. Sergi Freixes, investigador, diseñador gráfico y socio de Biscuits Barcelona, docente especializado en el área de food design, considera que en la denominada nueva normalidad será fundamental “innovar y experimentar con rigor científico con nuevos materiales biodegradables para crear envases, utensilios, uniformes y productos esterilizados y antibacterianos”. Para Freixes, la prevención de riesgos y el cambio de hábitos hacia compras inteligentes “first in, first out” serán algunos de los aspectos esenciales en un sector que deberá apoyarse en el diseño para establecer una relación afectiva y duradera entre consumidor y producto.

 

Raúl Escudero, arquitecto Director de Proyectos en 3G y especialista del ámbito de retail, apuesta por la creación de espacios que amplíen las medidas de seguridad en sus instalaciones de ventilación y climatización, materiales antibacterianos, sensores vinculados a IoT… todo ello sin olvidar que el retail avanza hacia un modelo de tiendas autónomas en las que el consumidor interaccionará en espacios táctiles y de realidad aumentada.

 

Para Marc Guitart, diseñador de negocios y fundador de brandcelona y blandlond, centrado en el ámbito del branding y la comunicación, considera que, en el momento presente, “la importancia de configurar una buena identidad corporativa será un elemento primordial para obtener relevancia en el mercado actual”. “Cualquier disciplina de diseño debe ofrecer una amplia base de conocimiento para afrontar correctamente las interpretaciones de un mercado que evoluciona a un ritmo altísimo y que permita formular nuevas ideas y soluciones. Todo un reto que ya trabajamos como profesionales y docentes en el IED.”

 

Guido Charosky, cofundador de Drop-Innovation, y consultor en innovación y diseño, la industria sanitaria toma en el momento actual una relevancia todavía más destacada. En palabras del docente de FITS, “el diseño de servicios y de la experiencia del usuario son fundamentales en este ámbito. Debemos conocer muy bien y (re)diseñar el journey del paciente y del profesional sanitario, y sus procesos para poder repensar el modelo de asistencia sanitaria online”. Se trata de una gran oportunidad para optimizar recursos, mejorando experiencias y ganando en eficiencia.

 

EDUCACIÓN PERSONALIZADA

 

Con estas premisas, FITS crea con sus interlocutores programas personalizados que resuelven sus retos profesionales mediante procesos de generación de innovación. Para ello, aporta soluciones de diseño aplicado con el objetivo de conseguir resultados tailor-made. Se trata de una experiencia formativa que implica, en todo el proceso, a los miembros de la organización en la definición del programa. La riqueza de los programas recae en los diferentes formatos, pudiendo ser presenciales, online, blended, one-to-one, workshops o viajes. El equipo docente está compuesto por más de 40 profesionales en activo que comparten el conocimiento adquirido a lo largo de sus carreras.

 

Mejorar aspectos de eficiencia operativa, procesos de I+D, transformación digital o el rediseño de sus estrategias de sostenibilidad, son algunos de los retos que afronta FITS junto con las organizaciones. Durante la formación, se realiza un acompañamiento en los procesos de transformación empresarial con metodologías creativas como el Design Thinking o System Thinking, que permiten lograr la ventaja estratégica que se precisa. También se investigan las competencias tecnológicas-digitales, analizan las tendencias del sector para adaptar los contenidos, evalúan nuevos modelos de negocio o plantean nuevas formas de liderazgo creativo, entre otros.

 

Nunca hemos sido una escuela al uso y con FITS queremos desdibujar la línea entre consultoría y curso de formación aplicada, con propuestas diferentes y personalizadas para cada uno de los programas, explica Sara Balestri, responsable de FITS Barcelona, sobre la motivación de esta nueva escuela formativa. “Era una necesidad que debíamos solventar, cada vez había más empresas interesadas en nuestro modelo de formación basado en el Challenge-Based Learning”, afirma.

 

Para más información, consulta su nueva página web fits.ied.es.

La entrada El IED apuesta con Future Innovation Tailor-Made School por la formación a medida para empresas e instituciones para afrontar los nuevos escenarios post-COVID-19 apareció primero en ZIRAN Comunicación.]]>
Programación actividades IED Madrid virtual – semana del 11 de mayo https://www.ziran.es/nota_prensa/programacion-actividades-ied-madrid-virtual-semana-del-11-de-mayo/ Thu, 07 May 2020 11:47:57 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8336 Programación virtual y gratuita de IED Madrid -semana del 11 al 15 de mayo-   IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la adaptación y transformación de las ciudades tras la pandemia del Coronavirus, o cómo usar los errores durante el proceso creativo.  Durante […]

La entrada Programación actividades IED Madrid virtual – semana del 11 de mayo apareció primero en ZIRAN Comunicación.]]>
Programación virtual y gratuita de IED Madrid
-semana del 11 al 15 de mayo-

 

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la adaptación y transformación de las ciudades tras la pandemia del Coronavirus, o cómo usar los errores durante el proceso creativo. 

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 11 al 15 de mayo
Inscripción gratuita aquí

11 de mayo, 18:30h: “Cuaderno del infierno”, con el ilustrador Jorge Tabanera (@Gatotonto)
El ilustrador, director creativo y docente de IED Madrid, Jorge Tabanera, dará una charla sobre cómo incorporar los errores en el proceso creativo, y trabajar con ellos en positivo, de forma que desde el error se pueda descubrir también un camino creativo.  Además, mostrará el proceso completo de creación de algunas de sus ilustraciones, desde la inspiración y el boceto al acabado final.

14 de mayo, 18:30: “Ciudades post-COVID: Desafíos, Actitudes y Oportunidades para el Diseño y la Creatividad”, con José Francisco García, director del City Lab en el laboratorio de innovación de IED Madrid.
En esta charla se hablará sobre las diferentes posibilidades de afrontar la nueva realidad en las ciudades después de la pandemia, compartiendo algunas ideas sobre cómo aplicar un camino de innovación social humanista en los entornos urbanos. La etapa post-COVID será un momento crucial en la vida de las ciudades para elegir la actitud futura: La creatividad y una mirada nueva y fresca son la oportunidad de encontrar nuevas formas de diseñar, planificar y transformar la realidad urbana.

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

Inscripción gratuita aquí
(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)
https://iedmadrid.com/especiales/eventos-online/

 

Bajar Imágenes

La entrada Programación actividades IED Madrid virtual – semana del 11 de mayo apareció primero en ZIRAN Comunicación.]]>
charla «Diseño de espacios de trabajo Covid-Free» con el arquitecto Raúl Escudero – programación virtual y gratuita IED Madrid – 5 mayo https://www.ziran.es/nota_prensa/charla-diseno-de-espacios-de-trabajo-covid-free-con-el-arquitecto-raul-escudero-programacion-virtual-y-gratuita-ied-madrid-5-mayo/ Mon, 04 May 2020 07:00:57 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8319 DISEÑO DE ESPACIOS DE TRABAJO COVID-FREE,  en la programación virtual y gratuita de charlas del IED Madrid 5 mayo 18:30h   El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management Inscripción gratuita aquí   IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos: […]

La entrada charla «Diseño de espacios de trabajo Covid-Free» con el arquitecto Raúl Escudero – programación virtual y gratuita IED Madrid – 5 mayo apareció primero en ZIRAN Comunicación.]]>
DISEÑO DE ESPACIOS DE TRABAJO COVID-FREE, 

en la programación virtual y gratuita de charlas del IED Madrid

5 mayo 18:30h

 

El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management

Inscripción gratuita aquí

 

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos: Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño.

 

El 5 de mayo a las 18:30 horas tendrá lugar la charla “Diseños de espacios de trabajo Covid-free” con el arquitecto y profesor del IED Madrid, Raúl Escudero.  Especialista en Workplace Innovation, con espacios diseñados y construidos en una docena de países, y la experiencia de haber creado espacios corporativos para empresas como Roche Farma, HP, L’Oreal, France Telecom, Lilly, Sanitas, DHL, Miele, Logista, Aegon, Vincci Hoteles, Banca March, Barclays o Microsoft, Escudero dará una serie de indicaciones y guías sobre cómo el diseño interior de los lugares de trabajo se adaptará a los nuevos protocolos sanitarios y cómo estas medidas evolucionarán en el futuro hacia un diseño de instalaciones pensado desde el primer boceto para ofrecer la mayor protección posible a los trabajadores.  Desde mamparas separadoras y elementos accionados sin contacto, al rediseño completo de edificios y procesos de uso, la charla de Raúl Escudero hará un recorrido desde los cambios más inmediatos hasta el pronóstico de cómo serán las oficinas del futuro.

 

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

 

 

 

Inscripción gratuita aquí

(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)

https://iedmadrid.com/especiales/eventos-online/

 

 

 

Sobre IED Madrid

 

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.

El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

 

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.

El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

 

www.iedmadrid.com

La entrada charla «Diseño de espacios de trabajo Covid-Free» con el arquitecto Raúl Escudero – programación virtual y gratuita IED Madrid – 5 mayo apareció primero en ZIRAN Comunicación.]]>
Masterclass «Moda y Crisis: reflejos de la historia», «Casas Imposibles» y » Aprender Diseño Interactivo», en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo https://www.ziran.es/nota_prensa/masterclass-moda-y-crisis-reflejos-de-la-historia-casas-imposibles-y-aprender-diseno-interactivo-en-la-programacion-virtual-y-gratuita-de-ied-madrid-del-4-al-8-de-mayo/ Wed, 29 Apr 2020 10:46:09 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8314 Una charla sobre cómo la moda se ha ido adaptando a los diferentes periodos de crisis de la historia, otra que hablará sobre el espacio doméstico en “Casas Imposibles” y una masterclass sobre diseño interactivo,  en la programación virtual y gratuita de IED Madrid para la semana del 4 al 8 de mayo   El […]

La entrada Masterclass «Moda y Crisis: reflejos de la historia», «Casas Imposibles» y » Aprender Diseño Interactivo», en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo apareció primero en ZIRAN Comunicación.]]>
Una charla sobre cómo la moda se ha ido adaptando a los diferentes periodos de crisis de la historia, otra que hablará sobre el espacio doméstico en “Casas Imposibles” y una masterclass sobre diseño interactivo, 

en la programación virtual y gratuita de IED Madrid para la semana del 4 al 8 de mayo

 

El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management

Inscripción gratuita aquí

 

IED Madrid continúa en mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la adaptación y transformación de la moda en épocas de crisis, el diseño interactivo o la arquitectura imposible.

 

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 4 al 8 de mayo

 

4 de mayo, 18:30h: Diseño interactivo, una introducción a Touchdesigner:

Impartido por Elena Juárez, artista digital y docente de tecnología e interactividad en el IED Madrid. Durante esta masterclass enseñará a realizar diseños generados por código reactivos a un audio o algún dispositivo externo con el programa Touchdesigner, explicando su interfaz y parámetros básicos sencillos para realizar composiciones interactivas. Juárez hará además un recorrido sobre el arte generativo y sus referencias.

 

6 de mayo, 18:30: Casas Imposibles

Ahora que nuestras casas se han convertido en oficina, gimnasio y bar de manera simultánea, parece adecuada una reflexión sobre cómo cambiar y adaptar el espacio doméstico. A través de la historia de dos viviendas y los cuerpos que las habitan, esta charla plantea una mirada disruptiva a lo que entendemos como hogar. Impartida por el arquitecto Niko Barrena, profesor de fundamentos del diseño en IED Madrid.

 

8 de mayo, 18:30h: Moda y crisis. Reflejos de la historia

Las crisis son momentos de transformaciones profundas que reflejan el colapso del sistema vigente hasta entonces. Laura Cerrato, profesora de Historia de la Moda en IED Madrid, hablará sobre cómo la moda ha servido también de expresión de los cambios sociales, políticos, económicos y culturales de cada época. Desde la actual situación de crisis, haremos un recorrido por algunas de esas otras crisis de la Historia para poder observar la conexión de la moda con esos otros momentos que cambiaron nuestro mundo.

 

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

 

 

 

Inscripción gratuita aquí

(La inscripción a cada curso se abre dos días antes de la fecha en la que tendrá lugar)

https://iedmadrid.com/especiales/eventos-online/

 

 

 

Sobre IED Madrid

 

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.

El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

 

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.

El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

 

www.iedmadrid.com

La entrada Masterclass «Moda y Crisis: reflejos de la historia», «Casas Imposibles» y » Aprender Diseño Interactivo», en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo apareció primero en ZIRAN Comunicación.]]>
Masterclass «Moda y Crisis: reflejos de la historia», y más, en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo https://www.ziran.es/nota_prensa/masterclass-moda-y-crisis-reflejos-de-la-historia-y-mas-en-la-programacion-virtual-y-gratuita-de-ied-madrid-del-4-al-8-de-mayo/ Wed, 29 Apr 2020 08:04:51 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8312 Programación virtual y gratuita de IED Madrid para la semana del 4 al 8 de mayo IED Madrid continúa durante el mes de mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la adaptación y transformación de la moda en época de crisis, el diseño interactivo, o la arquitectura imposible. […]

La entrada Masterclass «Moda y Crisis: reflejos de la historia», y más, en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo apareció primero en ZIRAN Comunicación.]]>
Programación virtual y gratuita de IED Madrid para la semana del 4 al 8 de mayo

IED Madrid continúa durante el mes de mayo con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la adaptación y transformación de la moda en época de crisis, el diseño interactivo, o la arquitectura imposible.

Durante las semanas de confinamiento IED Madrid ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 4 al 8 de mayo

4 de mayo, 18:30h: Diseño interactivo, una introducción a Touchdesigner:
Impartido por Elena Juárez, artista digital y docente de tecnología e interactividad en el IED Madrid. Durante esta masterclass enseñará a realizar diseños generados por código reactivos a un audio o algún dispositivo externo con el programa Touchdesigner, explicando su interfaz y parámetros básicos sencillos para realizar composiciones interactivas. Juárez hará además un recorrido sobre el arte generativo y sus referencias.

6 de mayo, 18:30: Casas Imposibles
Ahora que nuestras casas se han convertido en oficina, gimnasio y bar de manera simultánea, parece adecuada una reflexión sobre cómo cambiar y adaptar el espacio doméstico. A través de la historia de dos viviendas y los cuerpos que las habitan, esta charla plantea una mirada disruptiva a lo que entendemos como hogar. Impartida por el arquitecto Niko Barrena, profesor de fundamentos del diseño en IED Madrid.

8 de mayo, 18:30h: Moda y crisis. Reflejos de la historia
Las crisis son momentos de transformaciones profundas que reflejan el colapso del sistema vigente hasta entonces. Laura Cerrato, profesora de Historia de la Moda en IED Madrid, hablará sobre cómo la moda ha servido también de expresión de los cambios sociales, políticos, económicos y culturales de cada época. Desde la actual situación de crisis, haremos un recorrido por algunas de esas otras crisis de la Historia para poder observar la conexión de la moda con esos otros momentos que cambiaron nuestro mundo.

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.
Inscripción gratuita aquí
https://iedmadrid.com/especiales/eventos-online/

Bajar imágenes en mejor calidad

La entrada Masterclass «Moda y Crisis: reflejos de la historia», y más, en la programación virtual y gratuita de IED Madrid del 4 al 8 de mayo apareció primero en ZIRAN Comunicación.]]>
Taller de diseño de estampados en la programación virtual de IED Madrid https://www.ziran.es/nota_prensa/taller-de-diseno-de-estampados-en-la-programacion-virtual-de-ied-madrid/ Thu, 23 Apr 2020 10:13:02 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8295 Taller de diseño de estampados 27 de abril a las 18:30h en el aula virtual de IED Madrid    IED Madrid ofrece durante las semanas de confinamiento, de forma online y gratuita, una completa programación semanal de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases […]

La entrada Taller de diseño de estampados en la programación virtual de IED Madrid apareció primero en ZIRAN Comunicación.]]>
Taller de diseño de estampados
27 de abril a las 18:30h en el aula virtual de IED Madrid

 

 IED Madrid ofrece durante las semanas de confinamiento, de forma online y gratuita, una completa programación semanal de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales, abiertas y gratuitas previa inscripción, tocan cada semana diferentes temas relacionados con el diseño.

El próximo lunes 27 de abril a las 18:30h ofrece una clase sobre diseño de estampados, donde el docente Federico Antelo, especializado diseño textil, explicará características, claves y estrategias para crear diseños propios de forma manual.

Comenzando por un interesante recorrido por la evolución del Pattern Design a través de la obra de algunos de sus referentes más importantes, Antelo hablará de sus características fundamentales y algunas de sus reglas básicas. Con ejemplos en vídeo enseñará algunas estrategias para empezar a experimentar, aplicables al diseño textil o de cualquier otro tipo de superficie.

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad. Estos 20 años de existencia de IED Madrid no sólo se traducen en una amplia oferta formativa, también en un completo calendario de actividades culturales relacionadas con el diseño en todas sus vertientes, abiertas al público general y gratuitas, con el objetivo de extender el conocimiento y la cultura del diseño. Sus actividades, que durante el periodo de confinamiento han pasado ser virtuales, pueden consultarse de forma regular en la página https://iedmadrid.com/especiales/eventos-online/
Inscripción gratuita y listado de próximos eventos aquí

Imágenes en alta descargables aquí

 

Sobre IED Madrid
El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.
El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.
El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

www.iedmadrid.com

La entrada Taller de diseño de estampados en la programación virtual de IED Madrid apareció primero en ZIRAN Comunicación.]]>
Cómo optimizar una campaña de marketing con influencers, y consejos para expresar mejor conceptos e ideas creativas – Masterclasses online gratuitas en IED Madrid semana 20 de abril https://www.ziran.es/nota_prensa/como-optimizar-una-campana-de-marketing-con-influencers-y-consejos-para-expresar-mejor-conceptos-e-ideas-creativas-masterclasses-online-gratuitas-en-ied-madrid-semana-20-de-abril/ Fri, 17 Apr 2020 08:06:12 +0000 https://www.ziran.es/?post_type=nota_prensa&p=8282 Una charla sobre la Low Touch Economy, cómo crear una campaña de marketing con influencers, o  aprender a expresar y presentar ideas de forma creativa, en la programación virtual y gratuita de IED Madrid para la semana del 20 al 24 de abril   El IED Madrid continúa con su programación de masterclasses, workshops y […]

La entrada Cómo optimizar una campaña de marketing con influencers, y consejos para expresar mejor conceptos e ideas creativas – Masterclasses online gratuitas en IED Madrid semana 20 de abril apareció primero en ZIRAN Comunicación.]]>
Una charla sobre la Low Touch Economy, cómo crear una campaña de marketing con influencers, o  aprender a expresar y presentar ideas de forma creativa,

en la programación virtual y gratuita de IED Madrid para la semana del 20 al 24 de abril

 

El IED Madrid continúa con su programación de masterclasses, workshops y conferencias virtuales sobre diseño, creatividad y management

Inscripción gratuita aquí

 

 

Tras el éxito de su programa de charlas y masterclasses online, y en su búsqueda por seguir aportando contenidos de valor durante el confinamiento, IED Madrid continúa con su programación de eventos virtuales gratuitos, esta vez dedicados a temas como la innovación a través del diseño, el marketing de influencers o cómo hacer presentaciones exitosas de ideas creativas.

 

Durante las semanas de confinamiento ofrece un ciclo de masterclasses, conferencias y workshops en torno al diseño, impartidas por algunos de sus profesores más destacados. Estas clases magistrales son abiertas y gratuitas previa inscripción, y cada semana tocarán diferentes temas relacionados con el diseño. Estas son las actividades organizadas para la semana del 20 al 24 de abril:

 

20 de abril, 18:30h: Innovación en la Low Touch Economy, con Alejandro Briceño. La actual situación sin precedentes ha cambiado las reglas del juego, planteando la pregunta de cómo será el mundo después de este episodio, y cómo cambiará la forma de comunicarse, reunirse, comerciar y hacer negocios tras esta situación. En este webinar, Briceño analizará 10 tendencias de la economía “post-COVID” y cómo afectarán en determinados sectores como la tecnología, logística o alimentación, indagando en lo que el diseño puede hacer para tomar ventaja de esta nueva realidad.

 

22 de abril, 18:30: Cómo expresar mejor las ideas creativas, con la arquitecta Laura Andreu. Los asistentes a este taller recibirán las 5 claves para expresar ideas creativas a través de herramientas como el moodboard: Uno de los instrumentos más potentes del proceso creativo, que ayuda a expresar ideas de manera visual. Andreu explicará qué es un moodboard, sus aplicaciones, e impartirá consejos para presentar mejor y de forma más clara conceptos abstractos y creativos.

 

23 de abril, 18:30h: Cómo diseñar una estrategia de vídeo en redes sociales, con Ainhoa Muguerza, PR Manager de Divimove, empresa de medios líder en la industria audiovisual online en Europa, quien recorrerá los pasos más importantes para diseñar una estrategia de marketing audiovisual en redes sociales para una marca, analizando la importancia del vídeo como herramienta de comunicación, las distintas fases del proceso creativo, así como de publicación, distribución y colaboración con influencers para lograr los objetivos de una empresa.

 

El IED Madrid pertenece a un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial. Su centro madrileño comienza su actividad en 1994, y actualmente es un importante agente cultural de la ciudad con un calendario mensual de actividades en torno al diseño, que comprende exposiciones, charlas, festivales, conciertos y masterclasses gratuitas y abiertas al público, que durante el periodo que dure el confinamiento por el COVID 19, han pasado al formato online.

 

 

 

Inscripción gratuita aquí

https://iedmadrid.com/especiales/eventos-online/

 

 

 

Sobre IED Madrid

 

El Grupo IED es un network internacional de educación en Diseño y Management que nace en Italia en 1966 y hoy cuenta con once sedes en el mundo, repartidas entre Italia, España y Brasil. El IED es actualmente uno de los centros de estudios punteros en los campos del diseño de moda, audiovisual, diseño de producto e interiores a nivel mundial, y desde 2018 pertenece a una fundación sin ánimo de lucro, siguiendo el deseo dejado en testamento por Francesco Morelli, su fundador. Desde 1966 ha formado a más de 120.000 alumnos en diferentes áreas del diseño. De sus aulas han salido nombres como Pierpaolo Piccioli (Director Creativo de Valentino), María Grazia Chiuri (Directora Creativa de Dior), Claudio Cutugno (Diseñador de Giambattista Valli), María Lemus (Maria Ke Fisherman), Moisés Nieto, Jaime Hayón o María Clé, entre otros.

El IED Madrid comienza su actividad en 1994, y actualmente cuenta con tres sedes en la ciudad, siendo una de ellas el IED Innovation Lab.

 

Estos 20 años de existencia de IED Madrid se traducen en una amplia oferta formativa con un modelo académico innovador, único y reconocible capaz de adaptarse a las necesidades de una sociedad en constante evolución, que ha derivado en un gran número de alumnos premiados en concursos nacionales e internacionales de prestigio, desfilando en las mejores pasarelas y con proyectos reales realizados en estrecha colaboración con empresas del sector. Desde su apertura, IED Madrid ha formado a más de 18.000 alumnos y cada año cuenta con 1.500 nuevos estudiantes.

El IED Madrid ofrece Títulos Superiores Oficiales en Diseño, Ciclos Formativos Oficiales de Grado Superior, Diplomas IED, Cursos de Un Año, Másteres, Másteres Semipresenciales, Master of Design and Innovation, Cursos de Postgrado, Cursos de Verano y Junior Courses.

 

www.iedmadrid.com

La entrada Cómo optimizar una campaña de marketing con influencers, y consejos para expresar mejor conceptos e ideas creativas – Masterclasses online gratuitas en IED Madrid semana 20 de abril apareció primero en ZIRAN Comunicación.]]>