p-admin/includes/image.php'; } $image_meta = @wp_read_image_metadata( $upload['file'] ); if ( $image_meta ) { if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) { $title = wc_clean( $image_meta['title'] ); } if ( trim( $image_meta['caption'] ) ) { $content = wc_clean( $image_meta['caption'] ); } } $attachment = array( 'post_mime_type' => $info['type'], 'guid' => $upload['url'], 'post_parent' => $id, 'post_title' => $title ? $title : basename( $upload['file'] ), 'post_content' => $content, ); $attachment_id = wp_insert_attachment( $attachment, $upload['file'], $id ); if ( ! is_wp_error( $attachment_id ) ) { @wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $upload['file'] ) ); } return $attachment_id; } /** * Validate reports request arguments. * * @since 2.6.0 * @param mixed $value Value to validate. * @param WP_REST_Request $request Request instance. * @param string $param Param to validate. * @return WP_Error|boolean */ function wc_rest_validate_reports_request_arg( $value, $request, $param ) { $attributes = $request->get_attributes(); if ( ! isset( $attributes['args'][ $param ] ) || ! is_array( $attributes['args'][ $param ] ) ) { return true; } $args = $attributes['args'][ $param ]; if ( 'string' === $args['type'] && ! is_string( $value ) ) { /* translators: 1: param 2: type */ return new WP_Error( 'woocommerce_rest_invalid_param', sprintf( __( '%1$s is not of type %2$s', 'woocommerce' ), $param, 'string' ) ); } if ( 'date' === $args['format'] ) { $regex = '#^\d{4}-\d{2}-\d{2}$#'; if ( ! preg_match( $regex, $value, $matches ) ) { return new WP_Error( 'woocommerce_rest_invalid_date', __( 'The date you provided is invalid.', 'woocommerce' ) ); } } return true; } /** * Encodes a value according to RFC 3986. * Supports multidimensional arrays. * * @since 2.6.0 * @param string|array $value The value to encode. * @return string|array Encoded values. */ function wc_rest_urlencode_rfc3986( $value ) { if ( is_array( $value ) ) { return array_map( 'wc_rest_urlencode_rfc3986', $value ); } return str_replace( array( '+', '%7E' ), array( ' ', '~' ), rawurlencode( $value ) ); } /** * Check permissions of posts on REST API. * * @since 2.6.0 * @param string $post_type Post type. * @param string $context Request context. * @param int $object_id Post ID. * @return bool */ function wc_rest_check_post_permissions( $post_type, $context = 'read', $object_id = 0 ) { $contexts = array( 'read' => 'read_private_posts', 'create' => 'publish_posts', 'edit' => 'edit_post', 'delete' => 'delete_post', 'batch' => 'edit_others_posts', ); if ( 'revision' === $post_type ) { $permission = false; } else { $cap = $contexts[ $context ]; $post_type_object = get_post_type_object( $post_type ); $permission = current_user_can( $post_type_object->cap->$cap, $object_id ); } return apply_filters( 'woocommerce_rest_check_permissions', $permission, $context, $object_id, $post_type ); } /** * Check permissions of users on REST API. * * @since 2.6.0 * @param string $context Request context. * @param int $object_id Post ID. * @return bool */ function wc_rest_check_user_permissions( $context = 'read', $object_id = 0 ) { $contexts = array( 'read' => 'list_users', 'create' => 'promote_users', // Check if current user can create users, shop managers are not allowed to create users. 'edit' => 'edit_users', 'delete' => 'delete_users', 'batch' => 'promote_users', ); // Check to allow shop_managers to manage only customers. if ( in_array( $context, array( 'edit', 'delete' ), true ) && wc_current_user_has_role( 'shop_manager' ) ) { $permission = false; $user_data = get_userdata( $object_id ); $shop_manager_editable_roles = apply_filters( 'woocommerce_shop_manager_editable_roles', array( 'customer' ) ); if ( isset( $user_data->roles ) ) { $can_manage_users = array_intersect( $user_data->roles, array_unique( $shop_manager_editable_roles ) ); // Check if Shop Manager can edit customer or with the is same shop manager. if ( 0 < count( $can_manage_users ) || intval( $object_id ) === intval( get_current_user_id() ) ) { $permission = current_user_can( $contexts[ $context ], $object_id ); } } } else { $permission = current_user_can( $contexts[ $context ], $object_id ); } return apply_filters( 'woocommerce_rest_check_permissions', $permission, $context, $object_id, 'user' ); } /** * Check permissions of product terms on REST API. * * @since 2.6.0 * @param string $taxonomy Taxonomy. * @param string $context Request context. * @param int $object_id Post ID. * @return bool */ function wc_rest_check_product_term_permissions( $taxonomy, $context = 'read', $object_id = 0 ) { $contexts = array( 'read' => 'manage_terms', 'create' => 'edit_terms', 'edit' => 'edit_terms', 'delete' => 'delete_terms', 'batch' => 'edit_terms', ); $cap = $contexts[ $context ]; $taxonomy_object = get_taxonomy( $taxonomy ); $permission = current_user_can( $taxonomy_object->cap->$cap, $object_id ); return apply_filters( 'woocommerce_rest_check_permissions', $permission, $context, $object_id, $taxonomy ); } /** * Check manager permissions on REST API. * * @since 2.6.0 * @param string $object Object. * @param string $context Request context. * @return bool */ function wc_rest_check_manager_permissions( $object, $context = 'read' ) { $objects = array( 'reports' => 'view_woocommerce_reports', 'settings' => 'manage_woocommerce', 'system_status' => 'manage_woocommerce', 'attributes' => 'manage_product_terms', 'shipping_methods' => 'manage_woocommerce', 'payment_gateways' => 'manage_woocommerce', 'webhooks' => 'manage_woocommerce', ); $permission = current_user_can( $objects[ $object ] ); return apply_filters( 'woocommerce_rest_check_permissions', $permission, $context, 0, $object ); } /** * Check product reviews permissions on REST API. * * @since 3.5.0 * @param string $context Request context. * @param string $object_id Object ID. * @return bool */ function wc_rest_check_product_reviews_permissions( $context = 'read', $object_id = 0 ) { $permission = false; $contexts = array( 'read' => 'moderate_comments', 'create' => 'edit_products', 'edit' => 'edit_products', 'delete' => 'edit_products', 'batch' => 'edit_products', ); if ( $object_id > 0 ) { $object = get_comment( $object_id ); if ( ! is_a( $object, 'WP_Comment' ) || get_comment_type( $object ) !== 'review' ) { return false; } } if ( isset( $contexts[ $context ] ) ) { $permission = current_user_can( $contexts[ $context ], $object_id ); } return apply_filters( 'woocommerce_rest_check_permissions', $permission, $context, $object_id, 'product_review' ); } /** * Returns true if the current REST request is from the product editor. * * @since 8.9.0 * @return bool */ function wc_rest_is_from_product_editor() { return isset( $_SERVER['HTTP_X_WC_FROM_PRODUCT_EDITOR'] ) && '1' === $_SERVER['HTTP_X_WC_FROM_PRODUCT_EDITOR']; } /** * Check if a REST namespace should be loaded. Useful to maintain site performance even when lots of REST namespaces are registered. * * @since 9.2.0. * * @param string $ns The namespace to check. * @param string $rest_route (Optional) The REST route being checked. * * @return bool True if the namespace should be loaded, false otherwise. */ function wc_rest_should_load_namespace( string $ns, string $rest_route = '' ): bool { if ( '' === $rest_route ) { $rest_route = $GLOBALS['wp']->query_vars['rest_route'] ?? ''; } if ( '' === $rest_route ) { return true; } $rest_route = trailingslashit( ltrim( $rest_route, '/' ) ); $ns = trailingslashit( $ns ); /** * Known namespaces that we know are safe to not load if the request is not for them. Namespaces not in this namespace should always be loaded, because we don't know if they won't be making another internal REST request to an unloaded namespace. */ $known_namespaces = array( 'wc/v1', 'wc/v2', 'wc/v3', 'wc-telemetry', 'wc-admin', 'wc-analytics', 'wc/store', 'wc/private', ); $known_namespace_request = false; foreach ( $known_namespaces as $known_namespace ) { if ( str_starts_with( $rest_route, $known_namespace ) ) { $known_namespace_request = true; break; } } if ( ! $known_namespace_request ) { return true; } /** * Filters whether a namespace should be loaded. * * @param bool $should_load True if the namespace should be loaded, false otherwise. * @param string $ns The namespace to check. * @param string $rest_route The REST route being checked. * @param array $known_namespaces Known namespaces that we know are safe to not load if the request is not for them. * * @since 9.4 */ return apply_filters( 'wc_rest_should_load_namespace', str_starts_with( $rest_route, $ns ), $ns, $rest_route, $known_namespaces ); }
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/wp-content/plugins/woocommerce/includes/wc-rest-functions.php:1) in /htdocs/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 1563

Fatal error: Uncaught Error: Class "AmpProject\AmpWP\Services" not found in /htdocs/wp-content/plugins/amp/src/AmpWpPlugin.php:235 Stack trace: #0 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(194): AmpProject\AmpWP\AmpWpPlugin::AmpProject\AmpWP\{closure}('AmpProject\\AmpW...') #1 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(340): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->make_dependency(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), 'AmpProject\\AmpW...') #2 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(273): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->resolve_argument(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), 'AmpProject\\AmpW...', Object(ReflectionParameter), Array) #3 [internal function]: AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->AmpProject\AmpWP\Infrastructure\Injector\{closure}(Object(ReflectionParameter)) #4 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(271): array_map(Object(Closure), Array) #5 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(200): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->get_dependencies_for(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), Object(ReflectionClass)) #6 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(340): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->make_dependency(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), 'AmpProject\\AmpW...') #7 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(273): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->resolve_argument(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), 'AmpProject\\AmpW...', Object(ReflectionParameter), Array) #8 [internal function]: AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->AmpProject\AmpWP\Infrastructure\Injector\{closure}(Object(ReflectionParameter)) #9 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(271): array_map(Object(Closure), Array) #10 /htdocs/wp-content/plugins/amp/src/Infrastructure/Injector/SimpleInjector.php(89): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->get_dependencies_for(Object(AmpProject\AmpWP\Infrastructure\Injector\InjectionChain), Object(ReflectionClass), Array) #11 /htdocs/wp-content/plugins/amp/src/Infrastructure/ServiceBasedPlugin.php(476): AmpProject\AmpWP\Infrastructure\Injector\SimpleInjector->make('AmpProject\\AmpW...') #12 /htdocs/wp-content/plugins/amp/src/Infrastructure/ServiceBasedPlugin.php(417): AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin->instantiate_service('AmpProject\\AmpW...') #13 /htdocs/wp-content/plugins/amp/src/Infrastructure/ServiceBasedPlugin.php(395): AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin->maybe_register_service('mobile_redirect...', 'AmpProject\\AmpW...') #14 /htdocs/wp-content/plugins/amp/src/Infrastructure/ServiceBasedPlugin.php(203): AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin->schedule_potential_service_registration('mobile_redirect...', 'AmpProject\\AmpW...') #15 /htdocs/wp-content/plugins/amp/src/Infrastructure/ServiceBasedPlugin.php(145): AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin->register_services() #16 /htdocs/wp-content/plugins/amp/includes/amp-helper-functions.php(78): AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin->register() #17 /htdocs/wp-includes/class-wp-hook.php(324): amp_bootstrap_plugin('') #18 /htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array) #19 /htdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #20 /htdocs/wp-settings.php(559): do_action('plugins_loaded') #21 /htdocs/wp-config.php(100): require_once('/htdocs/wp-sett...') #22 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #23 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #24 /htdocs/index.php(17): require('/htdocs/wp-blog...') #25 {main} thrown in /htdocs/wp-content/plugins/amp/src/AmpWpPlugin.php on line 235