Soporte » Buscar » Resultados de búsqueda para 'error 500'

Viendo 15 resultados - del 16 al 30 (de un total de 688)
    • lalvarezvellido

      (@lalvarezvellido)


      Buenas, tras configurar la parte de tarjetas de crédito del plugin wooCommerce me ha saltado un error al aceptar todo «HTTP ERROR 500». No puedo acceder a mi sitio y constantemente me sale el mensaje «Ha habido un error crítico en esta web.»

      ¿Qué ha podido pasar y cómo podría solucionarlo?

      Gracias

      La página con la que necesito ayuda: [accede para ver el enlace]

    • Saludos. La línea completa del error en el archivo de log dice:
      PHP Fatal error: Cannot redeclare _resolve_home_block_template() (previously declared in /home/brianwesley1968/public_html/wp-includes/block-template.php:348) in /home/brianwesley1968/public_html/wp-includes/deprecated.php on line 4605

      En el explorador dirá que es un error 500. Esto sucedió el día que actualicé Elementor y WordPress. Primero uno, luego el otro.

      La página con la que necesito ayuda: [accede para ver el enlace]

    • Hola,

      Se actualizó la versión de WordPress a la 6.1.1 y desde ahí que nos arroja error crítico al tratar de ver la salud del sitio.

      Los parámetros que mantenemos actualmente son estos:

      memory_limit = 2048M

      post_max_size = 2048M

      upload_max_filesize = 2048M

      max_input_time = 300

      max_execution_time = 300

      max_file_uploads = 512M

      max_input_vars = 5000

      max_effective_size =128

      expose_php = Off

      Muchas gracias

      La página con la que necesito ayuda: [accede para ver el enlace]

    • hola me pueden ayudar, he estado presentando problemas con una página, hay veces se pierde el acceso al admin de la web y nos sale http error 500 las causas son multiples segun investigando se debe a la instalación de plugins, uso de recursos que limitan la capacidad de la memoria php, ahora bien la página se esta redireccionando a un sitio de publicidad engañosa carga unos instantes y rebota, pero es raro que en otros equipos exploran con normalidad.

      La página con la que necesito ayuda: [accede para ver el enlace]

    Iniciador del debate seccionnoticias

    (@seccionnoticias)

    Gracias por responder Alvaro.

    Intente actualizar el plugin que tenia desactualizado, fue lo único que pude hacer desde el admin de la web y se cayo la pagina , me salía el mensaje ESTA PAGINA NO FUNCIONA HTTP ERROR 500, el plugin es JETPACK, luego de un lapso de unos minutos, a mi correo llego el anuncio de jetpack que mi sitio ya estaba en linea nuevamente, así que trate de actualizarlo de nuevo y otra vez HTTP ERROR 500, creo que eso me confirma que el plugin de jetpack es el que me esta creando el problema.

    Asumo que lo del FTP lo debe ver el proveedor del servicio no?, ya me contacte con el y le reenvie tu mensaje.

    Lo del shorcode que mencionas ( que tampoco entiendo muy bien que es , pues no tengo ningún conocimiento de programación) si puse un código en el html del Yoast SEO que era para indexar mi web a google, lo realice con un tutorial pero no se como quitarlo o revertirlo, pues en el admin no puedo hacer absolutamente nada, no me deja modificar, borrar o desactivar nada, salvo el bendito jetpack y la pagina se cae.

    • diegosanchez93

      (@diegosanchez93)


      Hola, como estan?

      Basicamente lo que tengo es un plugin propio que estoy haciendo, en el que hice que en el panel de administracion me muestren unas tablas obtenidas con datos de la base de datos. Al traerme muchos registros es que quise hacer una paginacion con un buscador incluido. Logre encontrar como hacerlo, pero en una pagina comun.

      Mi problema viene a que yo en la pagina de administracion del plugin ya tengo como URL lo siguiente: /wp-admin/admin.php?page=suscripciones_plugin_menu#wf-suscriptores

      Siendo que el page es el nombre de la pagina para el panel, y #wf-suscriptores es la solapa en donde ira la tabla.

      El paginador y el buscador funcionan bien en sí, pero el problema es las rutas, ya que al tocar por ej pagina 2, la URL queda como: /wp-admin/admin.php?start=2, y al buscar en el buscador me queda como: /wp-admin/admin.php?search=palabrabuscada , siendo que me borra el demas contenido de la URL original.

      Logré hacer que se mantenga la URL como por ej: /wp-admin/admin.php?page=suscripciones_plugin_menu?start=2#wf-suscriptores , pero aun asi me tira error.

      No se si es que tengo que registrar la URL o como es que puedo hacer que todo funcione bien en conjunto.

      Dejo el codigo para que vean:

        echo '
          <div class="wf_settings_left" style="width: 100%;">
              
          	<div class="nav-tab-wrapper wp-clearfix wf-tab-head">
          		<a class="nav-tab" href="#wf-suscriptores">Lista de Suscriptores</a>
          		<a class="nav-tab" href="#wf-descuentos">Descuentos</a>
          	</div>
          	
          	
          	<div class="wf-tab-container">';
          	
          	
          ///////////////////////////////////////// RECUADRO LISTA DE SUSCRIPTORES ////////////////////////  
          
          
          // muestra los datos de una tabla personalizada, en una pagina especifica de wordpress
          // incluye paginacion y busqueda
         
      
      	$table_name = 'wp_suscriptores';        // custom table name
      	$items_per_page = 50;                   // quantity per page
        
      	$search_condition = '';                                                                         // la condicion de busqueda. Está para que busque lo que se pone                                                                                                     en el form de abajo
      	$search = $_REQUEST['search']??'';                                                              // se busca la condicion, si es que pusieron una en el buscador
      	if ( $search ) $search_condition = "WHERE first_name like '%$search%'";                       // si existe una condicion de busqueda, aparecerá aca la seccion                                                                                                     de codigo para la busqueda (WHERE...)
      
      	$start_number = $_REQUEST['start']??0;
      	if ( $start_number < 0 || ! is_numeric( $start_number ) ) $start_number = 0;                    // si el numero de inicio es menor a 0, o no es un numero, el                                                                                                        numero de comienzo quedará en 0
      
      	// Count items
      	$sql = "SELECT COUNT(*) FROM $table_name $search_condition";                                  // el string de la consulta a bbdd
      	$count = $wpdb->get_var($sql);                                                                  // creo que cuenta la cantidad de registros encontrados en la bbdd                                                                                                    con esa condicion de busqueda
      
      	// Items
      	$sql = "SELECT * FROM $table_name $search_condition LIMIT $start_number, $items_per_page";    // el string de la consulta a bbdd
          $items = $wpdb->get_results($sql);                                                              // realiza la busqueda con la condicion de busqueda y de                                                                                                             paginacion
          
      
          
      
          			
          
          
          // tabla 
          
      	// datos de registros
      	echo'   <div class="wf-tab-content" data-id="wf-suscriptores">
                      <div class="wrap">';
                      
                      
                          // buscador
          
          echo '          <form method="get" style="display: inline-block; float: right; margin-top: 10px; margin-bottom: 20px;">
              		        <input type="search" minlength="2" placeholder="Buscar suscriptor" name="search" value="'.$search.'">
              		        <input type="submit" value="Buscar">
              		    </form>';
              		    
                      
          echo '          <div id="contenedor-tablas" style="overflow: inherit !important;">
                          
                              <table class="wp-list-table widefat fixed striped table-view-list users" id="tabla-suscriptores" style="margin-bottom: 30px;">
                                  <thead>
                                      <tr>'; /* echo'
                                          <th class="manage-column">Nombre</th>'; */ echo'
                                          <th class="manage-column">Apellido</th>         
                                      </tr>
                                  </thead>
                                  <tbody id="the-list">';
                                      
                                      foreach ( $items as $item ) { 
                                          $nombre = $item->nombre;
                                          $apellido = $item->apellido;                    
                                          
      echo'                       <tr>
                                          <td>'; echo $nombre echo' </td> 
                                          <td>'; echo $apellido echo' </td>';
                             
          }
          echo'                   </tbody>
                              </table>';                        
          echo'           </div>';
          
          
          
                          // barra de paginacion
                      
                      	$navbar = '';
                      
                      	if ( $count > $items_per_page ){                              // si registros encontrados es mayor a registros por pagina
                      		$nav_count = 0;                                           // de donde empieza a contar los registros. Ira de 50 en 50 (0, 50, 100, etc)
                      		$page_count = 1;                                          // numero de pagina. Empieza por 1
                      		$str_search = '';                                         // string de busqueda. Empieza vacio
                      		$current_page = $start_number/$items_per_page + 1;        // numero de pagina actual
                      
                      		if ( $search ) $str_search = "&search=$search";           // si existe una condicion de busqueda, el string de busqueda sera el que figura ahi, que despues ira a la URL
                      
                      		while ( $nav_count < $count ) {                           // mientras nav_count (de donde empieza a contar los registros) sea menor a count (cantidad de registros encontrados con tal condicion de busqueda). En un ejemplo de 500 registros, y con 50 items por pagina, esto llegará hasta 10
                      			if ( $page_count === $current_page ){                 // si al iterar llega al numero de pagina actual, entonces imprime el numero sin ningun enlace
                      				$navbar .= "<span>{$page_count}</span> ";
                      			} else {                                              // sino, mientras siga iterando y el numero de pagina no es el actual, entonces imprimira un numero como enlace para esa pagina
                      				$navbar .= "<a href='?page=suscripciones_plugin_menu?start={$nav_count}{$str_search}#wf-suscriptores'>{$page_count}</a> ";
                      			}
                      			$nav_count += $items_per_page;                        // el nav_count arranca en 0, y si los items por pagina son 50, se ira sumando de 50 en 50
                      			$page_count++;                                        // cada iteracion suma un numero de pagina
                      		}
                      
                      		$navbar = "<section style='display: inline-block; float: right;'>$navbar</section>";                   // barra de paginacion lista
                      		
                      		echo $navbar;
                      	}   
          
          echo '     </div>
                  </div>';
         	
                  

      Cuando le doy al numero de pagina, me tira un error de permisos, exactamente me dice «Lo siento, no tienes permisos para acceder a esta página.». Y no se mucho pero calculo que sera que hay que registrar la URL o algo asi.

      PD: En el codigo deje los comentarios que hice para entender bien yo el codigo que encontré. Lo iba a borrar pero lo deje por las dudas para que a lo mejor les sea mas facil entenderlo tambien.

    • mixxuru

      (@mixxuru)


      Hola,

      Tengo un problema que al tratar de actualizar un plugin desde el escritorio primero de dice «actualización fallida» y posteriormente la web me tira «http error 500» y para solucionar lo del error o bien restauro un backup o renombre el archivo .htaccess con otro nombre y luego lo vuelvo a dejar con el nombre correcto.

      Al querer instalar o actualizar subiendo un archivo después de darle al botón «instalar ahora» carga y muestra un pantalla con el numero 1 , pero ahi no me tira «http error 500»

      Desde ya muchas gracias

    • zalogon2002

      (@zalogon2002)


      Hola, ayer terminaba se armar mi web en wordpress, todo funcionaba perfecto y de repente me tiro el siguiente error Ha habido un error crítico en este sitio. Si quiero ingresar desde el panel de wordpress me indica lo siguiente:
      Forbidden You don’t have permission to access this resource. Consulté en varios sitios y nada funcionó, cómo ultima opción me queda consultar con ustedes y ver que pudo suceder.
      El debug que realicé de la web me dice lo siguiente:

      [13-Feb-2023 19:30:50 UTC] PHP Warning: Array to string conversion in home/w5000174/public_html/wp-includes/class-wp-widget.php on line 691 [13-Feb-2023 19:30:50 UTC] PHP Fatal error: Cannot redeclare JuXoQ0ze() (previously declared in /home/w5000174/public_html/wp-includes/images/license.txt:7) in /home/w5000174/public_html/wp-content/themes/hello-elementor/index.php on line 7

      Gracias por la ayuda!

      La página con la que necesito ayuda: [accede para ver el enlace]

    • drakogaldames

      (@drakogaldames)


      Hola a todos, tengo este problema desde que me pase al nuevo hosting.

      El problema consiste en que al descargar archivos pesados, las descargas llegan a un limite de 500mb, dandolo por terminado. Este problema solo esta presente en computadoras, y en paises especificos. Ya que mi proveedor de hosting y diferentes fiverrs han logrado descargar sin problemas, por lo que no es un error general.

      Al descargar desde un celular o usando un gestor de descargas como lo es IDM, el problema desaparece, se logra descargar por completo el archivo.

      Pero al descargar desde una computadora utilizando el navegador, la descarga se frena y finaliza a los 500mb.

      Este problema tambien esta presente al cargar el constructor de mi tema, ya que el mismo no carga correctamente.

      Al contactar con el soporte del tema y brindarle acceso de administrador para poder probar el constructor, logro ingresar y cargar el complemento sin ningun tipo de falla.

      Nuevamente, es un problema que solo esta presente en ciertas localidades y en computadoras.

      Mi proveedor de hosting ha alterado diferentes propiedades del servidor, desde php.ini hasta el LimitRequestBody y LimitXMLRequestBody.
      Pero no ha dado resultados.

      Tambien contacte a mi proveedor de ISP, pero el problema no tiene nada que ver con ellos. Es un problema más bien presente dentro de wordpress o algo similar.

      La página con la que necesito ayuda: [accede para ver el enlace]

    Hola! Perdona la tardanza, me paso cuando puedo por aquí. Vale, entonces descartamos plugins y temas.
    Para el debug, si quieres un resumen es solo cambiar un parámetro en el archivo de la carpeta raíz wp-config la línea en la que esté escrito WP_DEBUG, ponerlo en true y cargar la página que falla para ver el fallo. Para desactivarlo, el valor se pone de nuevo como «false» y listo.
    Convendría ver el error exacto con debug o en algún log de errores de php que tengas en el servidor (filtrando por errores 500) para localizarlo mejor

    Moderador almendron

    (@almendron)

    1) Doy por hecho que la copia era de cuando temías instalado el WP en el subdiminio y que la copia restaurada ha dio al mismo ¿es así?

    2) El error 500 puede deberse a muchas causas. Ponte en contacto con el soporte del hosting para que te miren los logs de errores del servidor a ver si hay alguna pista sobre el error.

    3) Indica la URL del sitio.

    Iniciador del debate mary2867

    (@mary2867)

    Buenas noches.
    Gracias por tu respuesta.
    He realizado la restauración del sitio mediante las copias de los ficheros y la base de datos,
    Subir los ficheros ha funcionado, pero ha habido un error 500 tras el cambio.
    Agradezco mucho que me podáis orientar para encontrar cómo solucionarlo.

    • Hola, como estan? Estoy queriendo solucionar un problema que me acaba de pasar. Sinceramente no recuerdo haber tocado nada raro. Al incio de cada pagina, incluso en la seccion de admin, me aparece arriba un texto muy largo de error, pero luego de ese texto, debajo la vista de todo se visualiza normalmemnte. Alguien sabe que puede ser?

      El error es el siguiente (lo mando asi porque no puedo compartir imagen):

      /** * REST API: WP_REST_Attachments_Controller class * * @package WordPress * @subpackage REST_API * @since 4.7.0 */ /** * Core controller used to access attachments via the REST API. * * @since 4.7.0 * * @see WP_REST_Posts_Controller */ class WP_REST_Attachments_Controller extends WP_REST_Posts_Controller { /** * Whether the controller supports batching. * * @since 5.9.0 * @var false */ protected $allow_batch = false; /** * Registers the routes for attachments. * * @since 5.3.0 * * @see register_rest_route() */ public function register_routes() { parent::register_routes(); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\d]+)/post-process', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'post_process_item' ), 'permission_callback' => array( $this, 'post_process_item_permissions_check' ), 'args' => array( 'id' => array( 'description' => __( 'Unique identifier for the attachment.' ), 'type' => 'integer', ), 'action' => array( 'type' => 'string', 'enum' => array( 'create-image-subsizes' ), 'required' => true, ), ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\d]+)/edit', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'edit_media_item' ), 'permission_callback' => array( $this, 'edit_media_item_permissions_check' ), 'args' => $this->get_edit_media_item_args(), ) ); } /** * Determines the allowed query_vars for a get_items() response and * prepares for WP_Query. * * @since 4.7.0 * * @param array $prepared_args Optional. Array of prepared arguments. Default empty array. * @param WP_REST_Request $request Optional. Request to prepare items for. * @return array Array of query arguments. */ protected function prepare_items_query( $prepared_args = array(), $request = null ) { $query_args = parent::prepare_items_query( $prepared_args, $request ); if ( empty( $query_args['post_status'] ) ) { $query_args['post_status'] = 'inherit'; } $media_types = $this->get_media_types(); if ( ! empty( $request['media_type'] ) && isset( $media_types[ $request['media_type'] ] ) ) { $query_args['post_mime_type'] = $media_types[ $request['media_type'] ]; } if ( ! empty( $request['mime_type'] ) ) { $parts = explode( '/', $request['mime_type'] ); if ( isset( $media_types[ $parts[0] ] ) && in_array( $request['mime_type'], $media_types[ $parts[0] ], true ) ) { $query_args['post_mime_type'] = $request['mime_type']; } } // Filter query clauses to include filenames. if ( isset( $query_args['s'] ) ) { add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' ); } return $query_args; } /** * Checks if a given request has access to create an attachment. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error Boolean true if the attachment may be created, or a WP_Error if not. */ public function create_item_permissions_check( $request ) { $ret = parent::create_item_permissions_check( $request ); if ( ! $ret || is_wp_error( $ret ) ) { return $ret; } if ( ! current_user_can( 'upload_files' ) ) { return new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to upload media on this site.' ), array( 'status' => 400 ) ); } // Attaching media to a post requires ability to edit said post. if ( ! empty( $request['post'] ) && ! current_user_can( 'edit_post', (int) $request['post'] ) ) { return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to upload media to this post.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Creates a single attachment. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure. */ public function create_item( $request ) { if ( ! empty( $request['post'] ) && in_array( get_post_type( $request['post'] ), array( 'revision', 'attachment' ), true ) ) { return new WP_Error( 'rest_invalid_param', __( 'Invalid parent type.' ), array( 'status' => 400 ) ); } $insert = $this->insert_attachment( $request ); if ( is_wp_error( $insert ) ) { return $insert; } $schema = $this->get_item_schema(); // Extract by name. $attachment_id = $insert['attachment_id']; $file = $insert['file']; if ( isset( $request['alt_text'] ) ) { update_post_meta( $attachment_id, '_wp_attachment_image_alt', sanitize_text_field( $request['alt_text'] ) ); } if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) { $meta_update = $this->meta->update_value( $request['meta'], $attachment_id ); if ( is_wp_error( $meta_update ) ) { return $meta_update; } } $attachment = get_post( $attachment_id ); $fields_update = $this->update_additional_fields_for_object( $attachment, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'edit' ); /** * Fires after a single attachment is completely created or updated via the REST API. * * @since 5.0.0 * * @param WP_Post $attachment Inserted or updated attachment object. * @param WP_REST_Request $request Request object. * @param bool $creating True when creating an attachment, false when updating. */ do_action( 'rest_after_insert_attachment', $attachment, $request, true ); wp_after_insert_post( $attachment, false, null ); if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { // Set a custom header with the attachment_id. // Used by the browser/client to resume creating image sub-sizes after a PHP fatal error. header( 'X-WP-Upload-Attachment-ID: ' . $attachment_id ); } // Include media and image functions to get access to wp_generate_attachment_metadata(). require_once ABSPATH . 'wp-admin/includes/media.php'; require_once ABSPATH . 'wp-admin/includes/image.php'; // Post-process the upload (create image sub-sizes, make PDF thumbnails, etc.) and insert attachment meta. // At this point the server may run out of resources and post-processing of uploaded images may fail. wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) ); $response = $this->prepare_item_for_response( $attachment, $request ); $response = rest_ensure_response( $response ); $response->set_status( 201 ); $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $attachment_id ) ) ); return $response; } /** * Inserts the attachment post in the database. Does not update the attachment meta. * * @since 5.3.0 * * @param WP_REST_Request $request * @return array|WP_Error */ protected function insert_attachment( $request ) { // Get the file via $_FILES or raw data. $files = $request->get_file_params(); $headers = $request->get_headers(); if ( ! empty( $files ) ) { $file = $this->upload_from_file( $files, $headers ); } else { $file = $this->upload_from_data( $request->get_body(), $headers ); } if ( is_wp_error( $file ) ) { return $file; } $name = wp_basename( $file['file'] ); $name_parts = pathinfo( $name ); $name = trim( substr( $name, 0, -( 1 + strlen( $name_parts['extension'] ) ) ) ); $url = $file['url']; $type = $file['type']; $file = $file['file']; // Include image functions to get access to wp_read_image_metadata(). require_once ABSPATH . 'wp-admin/includes/image.php'; // Use image exif/iptc data for title and caption defaults if possible. $image_meta = wp_read_image_metadata( $file ); if ( ! empty( $image_meta ) ) { if ( empty( $request['title'] ) && trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) { $request['title'] = $image_meta['title']; } if ( empty( $request['caption'] ) && trim( $image_meta['caption'] ) ) { $request['caption'] = $image_meta['caption']; } } $attachment = $this->prepare_item_for_database( $request ); $attachment->post_mime_type = $type; $attachment->guid = $url; if ( empty( $attachment->post_title ) ) { $attachment->post_title = preg_replace( '/\.[^.]+$/', '', wp_basename( $file ) ); } // $post_parent is inherited from $attachment['post_parent']. $id = wp_insert_attachment( wp_slash( (array) $attachment ), $file, 0, true, false ); if ( is_wp_error( $id ) ) { if ( 'db_update_error' === $id->get_error_code() ) { $id->add_data( array( 'status' => 500 ) ); } else { $id->add_data( array( 'status' => 400 ) ); } return $id; } $attachment = get_post( $id ); /** * Fires after a single attachment is created or updated via the REST API. * * @since 4.7.0 * * @param WP_Post $attachment Inserted or updated attachment * object. * @param WP_REST_Request $request The request sent to the API. * @param bool $creating True when creating an attachment, false when updating. */ do_action( 'rest_insert_attachment', $attachment, $request, true ); return array( 'attachment_id' => $id, 'file' => $file, ); } /** * Updates a single attachment. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure. */ public function update_item( $request ) { if ( ! empty( $request['post'] ) && in_array( get_post_type( $request['post'] ), array( 'revision', 'attachment' ), true ) ) { return new WP_Error( 'rest_invalid_param', __( 'Invalid parent type.' ), array( 'status' => 400 ) ); } $attachment_before = get_post( $request['id'] ); $response = parent::update_item( $request ); if ( is_wp_error( $response ) ) { return $response; } $response = rest_ensure_response( $response ); $data = $response->get_data(); if ( isset( $request['alt_text'] ) ) { update_post_meta( $data['id'], '_wp_attachment_image_alt', $request['alt_text'] ); } $attachment = get_post( $request['id'] ); $fields_update = $this->update_additional_fields_for_object( $attachment, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'edit' ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php */ do_action( 'rest_after_insert_attachment', $attachment, $request, false ); wp_after_insert_post( $attachment, true, $attachment_before ); $response = $this->prepare_item_for_response( $attachment, $request ); $response = rest_ensure_response( $response ); return $response; } /** * Performs post processing on an attachment. * * @since 5.3.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure. */ public function post_process_item( $request ) { switch ( $request['action'] ) { case 'create-image-subsizes': require_once ABSPATH . 'wp-admin/includes/image.php'; wp_update_image_subsizes( $request['id'] ); break; } $request['context'] = 'edit'; return $this->prepare_item_for_response( get_post( $request['id'] ), $request ); } /** * Checks if a given request can perform post processing on an attachment. * * @since 5.3.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise. */ public function post_process_item_permissions_check( $request ) { return $this->update_item_permissions_check( $request ); } /** * Checks if a given request has access to editing media. * * @since 5.5.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function edit_media_item_permissions_check( $request ) { if ( ! current_user_can( 'upload_files' ) ) { return new WP_Error( 'rest_cannot_edit_image', __( 'Sorry, you are not allowed to upload media on this site.' ), array( 'status' => rest_authorization_required_code() ) ); } return $this->update_item_permissions_check( $request ); } /** * Applies edits to a media item and creates a new attachment record. * * @since 5.5.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure. */ public function edit_media_item( $request ) { require_once ABSPATH . 'wp-admin/includes/image.php'; $attachment_id = $request['id']; // This also confirms the attachment is an image. $image_file = wp_get_original_image_path( $attachment_id ); $image_meta = wp_get_attachment_metadata( $attachment_id ); if ( ! $image_meta || ! $image_file || ! wp_image_file_matches_image_meta( $request['src'], $image_meta, $attachment_id ) ) { return new WP_Error( 'rest_unknown_attachment', __( 'Unable to get meta information for file.' ), array( 'status' => 404 ) ); } $supported_types = array( 'image/jpeg', 'image/png', 'image/gif', 'image/webp' ); $mime_type = get_post_mime_type( $attachment_id ); if ( ! in_array( $mime_type, $supported_types, true ) ) { return new WP_Error( 'rest_cannot_edit_file_type', __( 'This type of file cannot be edited.' ), array( 'status' => 400 ) ); } // Themodifiersparam takes precedence over the older format. if ( isset( $request['modifiers'] ) ) { $modifiers = $request['modifiers']; } else { $modifiers = array(); if ( ! empty( $request['rotation'] ) ) { $modifiers[] = array( 'type' => 'rotate', 'args' => array( 'angle' => $request['rotation'], ), ); } if ( isset( $request['x'], $request['y'], $request['width'], $request['height'] ) ) { $modifiers[] = array( 'type' => 'crop', 'args' => array( 'left' => $request['x'], 'top' => $request['y'], 'width' => $request['width'], 'height' => $request['height'], ), ); } if ( 0 === count( $modifiers ) ) { return new WP_Error( 'rest_image_not_edited', __( 'The image was not edited. Edit the image before applying the changes.' ), array( 'status' => 400 ) ); } } /* * If the file doesn't exist, attempt a URL fopen on the src link. * This can occur with certain file replication plugins. * Keep the original file path to get a modified name later. */ $image_file_to_edit = $image_file; if ( ! file_exists( $image_file_to_edit ) ) { $image_file_to_edit = _load_image_to_edit_path( $attachment_id ); } $image_editor = wp_get_image_editor( $image_file_to_edit ); if ( is_wp_error( $image_editor ) ) { return new WP_Error( 'rest_unknown_image_file_type', __( 'Unable to edit this image.' ), array( 'status' => 500 ) ); } foreach ( $modifiers as $modifier ) { $args = $modifier['args']; switch ( $modifier['type'] ) { case 'rotate': // Rotation direction: clockwise vs. counter clockwise. $rotate = 0 - $args['angle']; if ( 0 !== $rotate ) { $result = $image_editor->rotate( $rotate ); if ( is_wp_error( $result ) ) { return new WP_Error( 'rest_image_rotation_failed', __( 'Unable to rotate this image.' ), array( 'status' => 500 ) ); } } break; case 'crop': $size = $image_editor->get_size(); $crop_x = round( ( $size['width'] * $args['left'] ) / 100.0 ); $crop_y = round( ( $size['height'] * $args['top'] ) / 100.0 ); $width = round( ( $size['width'] * $args['width'] ) / 100.0 ); $height = round( ( $size['height'] * $args['height'] ) / 100.0 ); if ( $size['width'] !== $width && $size['height'] !== $height ) { $result = $image_editor->crop( $crop_x, $crop_y, $width, $height ); if ( is_wp_error( $result ) ) { return new WP_Error( 'rest_image_crop_failed', __( 'Unable to crop this image.' ), array( 'status' => 500 ) ); } } break; } } // Calculate the file name. $image_ext = pathinfo( $image_file, PATHINFO_EXTENSION ); $image_name = wp_basename( $image_file, ".{$image_ext}" ); // Do not append multiple-editedto the file name. // The user may be editing a previously edited image. if ( preg_match( '/-edited(-\d+)?$/', $image_name ) ) { // Remove any-1,-2, etc.wp_unique_filename()will add the proper number. $image_name = preg_replace( '/-edited(-\d+)?$/', '-edited', $image_name ); } else { // Append-editedbefore the extension. $image_name .= '-edited'; } $filename = "{$image_name}.{$image_ext}"; // Create the uploads sub-directory if needed. $uploads = wp_upload_dir(); // Make the file name unique in the (new) upload directory. $filename = wp_unique_filename( $uploads['path'], $filename ); // Save to disk. $saved = $image_editor->save( $uploads['path'] . "/$filename" ); if ( is_wp_error( $saved ) ) { return $saved; } // Create new attachment post. $new_attachment_post = array( 'post_mime_type' => $saved['mime-type'], 'guid' => $uploads['url'] . "/$filename", 'post_title' => $image_name, 'post_content' => '', ); // Copy post_content, post_excerpt, and post_title from the edited image's attachment post. $attachment_post = get_post( $attachment_id ); if ( $attachment_post ) { $new_attachment_post['post_content'] = $attachment_post->post_content; $new_attachment_post['post_excerpt'] = $attachment_post->post_excerpt; $new_attachment_post['post_title'] = $attachment_post->post_title; } $new_attachment_id = wp_insert_attachment( wp_slash( $new_attachment_post ), $saved['path'], 0, true ); if ( is_wp_error( $new_attachment_id ) ) { if ( 'db_update_error' === $new_attachment_id->get_error_code() ) { $new_attachment_id->add_data( array( 'status' => 500 ) ); } else { $new_attachment_id->add_data( array( 'status' => 400 ) ); } return $new_attachment_id; } // Copy the image alt text from the edited image. $image_alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ); if ( ! empty( $image_alt ) ) { // update_post_meta() expects slashed. update_post_meta( $new_attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); } if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { // Set a custom header with the attachment_id. // Used by the browser/client to resume creating image sub-sizes after a PHP fatal error. header( 'X-WP-Upload-Attachment-ID: ' . $new_attachment_id ); } // Generate image sub-sizes and meta. $new_image_meta = wp_generate_attachment_metadata( $new_attachment_id, $saved['path'] ); // Copy the EXIF metadata from the original attachment if not generated for the edited image. if ( isset( $image_meta['image_meta'] ) && isset( $new_image_meta['image_meta'] ) && is_array( $new_image_meta['image_meta'] ) ) { // Merge but skip empty values. foreach ( (array) $image_meta['image_meta'] as $key => $value ) { if ( empty( $new_image_meta['image_meta'][ $key ] ) && ! empty( $value ) ) { $new_image_meta['image_meta'][ $key ] = $value; } } } // Reset orientation. At this point the image is edited and orientation is correct. if ( ! empty( $new_image_meta['image_meta']['orientation'] ) ) { $new_image_meta['image_meta']['orientation'] = 1; } // The attachment_id may change if the site is exported and imported. $new_image_meta['parent_image'] = array( 'attachment_id' => $attachment_id, // Path to the originally uploaded image file relative to the uploads directory. 'file' => _wp_relative_upload_path( $image_file ), ); /** * Filters the meta data for the new image created by editing an existing image. * * @since 5.5.0 * * @param array $new_image_meta Meta data for the new image. * @param int $new_attachment_id Attachment post ID for the new image. * @param int $attachment_id Attachment post ID for the edited (parent) image. */ $new_image_meta = apply_filters( 'wp_edited_image_metadata', $new_image_meta, $new_attachment_id, $attachment_id ); wp_update_attachment_metadata( $new_attachment_id, $new_image_meta ); $response = $this->prepare_item_for_response( get_post( $new_attachment_id ), $request ); $response->set_status( 201 ); $response->header( 'Location', rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $new_attachment_id ) ) ); return $response; } /** * Prepares a single attachment for create or update. * * @since 4.7.0 * * @param WP_REST_Request $request Request object. * @return stdClass|WP_Error Post object. */ protected function prepare_item_for_database( $request ) { $prepared_attachment = parent::prepare_item_for_database( $request ); // Attachment caption (post_excerpt internally). if ( isset( $request['caption'] ) ) { if ( is_string( $request['caption'] ) ) { $prepared_attachment->post_excerpt = $request['caption']; } elseif ( isset( $request['caption']['raw'] ) ) { $prepared_attachment->post_excerpt = $request['caption']['raw']; } } // Attachment description (post_content internally). if ( isset( $request['description'] ) ) { if ( is_string( $request['description'] ) ) { $prepared_attachment->post_content = $request['description']; } elseif ( isset( $request['description']['raw'] ) ) { $prepared_attachment->post_content = $request['description']['raw']; } } if ( isset( $request['post'] ) ) { $prepared_attachment->post_parent = (int) $request['post']; } return $prepared_attachment; } /** * Prepares a single attachment output for response. * * @since 4.7.0 * @since 5.9.0 Renamed$postto$itemto match parent class for PHP 8 named parameter support. * * @param WP_Post $item Attachment object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $post = $item; $response = parent::prepare_item_for_response( $post, $request ); $fields = $this->get_fields_for_response( $request ); $data = $response->get_data(); if ( in_array( 'description', $fields, true ) ) { $data['description'] = array( 'raw' => $post->post_content, /** This filter is documented in wp-includes/post-template.php */ 'rendered' => apply_filters( 'the_content', $post->post_content ), ); } if ( in_array( 'caption', $fields, true ) ) { /** This filter is documented in wp-includes/post-template.php */ $caption = apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); /** This filter is documented in wp-includes/post-template.php */ $caption = apply_filters( 'the_excerpt', $caption ); $data['caption'] = array( 'raw' => $post->post_excerpt, 'rendered' => $caption, ); } if ( in_array( 'alt_text', $fields, true ) ) { $data['alt_text'] = get_post_meta( $post->ID, '_wp_attachment_image_alt', true ); } if ( in_array( 'media_type', $fields, true ) ) { $data['media_type'] = wp_attachment_is_image( $post->ID ) ? 'image' : 'file'; } if ( in_array( 'mime_type', $fields, true ) ) { $data['mime_type'] = $post->post_mime_type; } if ( in_array( 'media_details', $fields, true ) ) { $data['media_details'] = wp_get_attachment_metadata( $post->ID ); // Ensure empty details is an empty object. if ( empty( $data['media_details'] ) ) { $data['media_details'] = new stdClass; } elseif ( ! empty( $data['media_details']['sizes'] ) ) { foreach ( $data['media_details']['sizes'] as $size => &$size_data ) { if ( isset( $size_data['mime-type'] ) ) { $size_data['mime_type'] = $size_data['mime-type']; unset( $size_data['mime-type'] ); } // Use the same method image_downsize() does. $image_src = wp_get_attachment_image_src( $post->ID, $size ); if ( ! $image_src ) { continue; } $size_data['source_url'] = $image_src[0]; } $full_src = wp_get_attachment_image_src( $post->ID, 'full' ); if ( ! empty( $full_src ) ) { $data['media_details']['sizes']['full'] = array( 'file' => wp_basename( $full_src[0] ), 'width' => $full_src[1], 'height' => $full_src[2], 'mime_type' => $post->post_mime_type, 'source_url' => $full_src[0], ); } } else { $data['media_details']['sizes'] = new stdClass; } } if ( in_array( 'post', $fields, true ) ) { $data['post'] = ! empty( $post->post_parent ) ? (int) $post->post_parent : null; } if ( in_array( 'source_url', $fields, true ) ) { $data['source_url'] = wp_get_attachment_url( $post->ID ); } if ( in_array( 'missing_image_sizes', $fields, true ) ) { require_once ABSPATH . 'wp-admin/includes/image.php'; $data['missing_image_sizes'] = array_keys( wp_get_missing_image_subsizes( $post->ID ) ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->filter_response_by_context( $data, $context ); $links = $response->get_links(); // Wrap the data in a response object. $response = rest_ensure_response( $data ); foreach ( $links as $rel => $rel_links ) { foreach ( $rel_links as $link ) { $response->add_link( $rel, $link['href'], $link['attributes'] ); } } /** * Filters an attachment returned from the REST API. * * Allows modification of the attachment right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param WP_Post $post The original attachment post. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_attachment', $response, $post, $request ); } /** * Retrieves the attachment's schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema as an array. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = parent::get_item_schema(); $schema['properties']['alt_text'] = array( 'description' => __( 'Alternative text to display when attachment is not displayed.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => 'sanitize_text_field', ), ); $schema['properties']['caption'] = array( 'description' => __( 'The attachment caption.' ), 'type' => 'object', 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database(). 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database(). ), 'properties' => array( 'raw' => array( 'description' => __( 'Caption for the attachment, as it exists in the database.' ), 'type' => 'string', 'context' => array( 'edit' ), ), 'rendered' => array( 'description' => __( 'HTML caption for the attachment, transformed for display.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), ), ); $schema['properties']['description'] = array( 'description' => __( 'The attachment description.' ), 'type' => 'object', 'context' => array( 'view', 'edit' ), 'arg_options' => array( 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database(). 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database(). ), 'properties' => array( 'raw' => array( 'description' => __( 'Description for the attachment, as it exists in the database.' ), 'type' => 'string', 'context' => array( 'edit' ), ), 'rendered' => array( 'description' => __( 'HTML description for the attachment, transformed for display.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), ), ); $schema['properties']['media_type'] = array( 'description' => __( 'Attachment type.' ), 'type' => 'string', 'enum' => array( 'image', 'file' ), 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['mime_type'] = array( 'description' => __( 'The attachment MIME type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['media_details'] = array( 'description' => __( 'Details about the media file, specific to its type.' ), 'type' => 'object', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['post'] = array( 'description' => __( 'The ID for the associated post of the attachment.' ), 'type' => 'integer', 'context' => array( 'view', 'edit' ), ); $schema['properties']['source_url'] = array( 'description' => __( 'URL to the original attachment file.' ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['missing_image_sizes'] = array( 'description' => __( 'List of the missing image sizes of the attachment.' ), 'type' => 'array', 'items' => array( 'type' => 'string' ), 'context' => array( 'edit' ), 'readonly' => true, ); unset( $schema['properties']['password'] ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Handles an upload via raw POST data. * * @since 4.7.0 * * @param array $data Supplied file data. * @param array $headers HTTP headers from the request. * @return array|WP_Error Data from wp_handle_sideload(). */ protected function upload_from_data( $data, $headers ) { if ( empty( $data ) ) { return new WP_Error( 'rest_upload_no_data', __( 'No data supplied.' ), array( 'status' => 400 ) ); } if ( empty( $headers['content_type'] ) ) { return new WP_Error( 'rest_upload_no_content_type', __( 'No Content-Type supplied.' ), array( 'status' => 400 ) ); } if ( empty( $headers['content_disposition'] ) ) { return new WP_Error( 'rest_upload_no_content_disposition', __( 'No Content-Disposition supplied.' ), array( 'status' => 400 ) ); } $filename = self::get_filename_from_disposition( $headers['content_disposition'] ); if ( empty( $filename ) ) { return new WP_Error( 'rest_upload_invalid_disposition', __( 'Invalid Content-Disposition supplied. Content-Disposition needs to be formatted asattachment; filename=»image.png»or similar.' ), array( 'status' => 400 ) ); } if ( ! empty( $headers['content_md5'] ) ) { $content_md5 = array_shift( $headers['content_md5'] ); $expected = trim( $content_md5 ); $actual = md5( $data ); if ( $expected !== $actual ) { return new WP_Error( 'rest_upload_hash_mismatch', __( 'Content hash did not match expected.' ), array( 'status' => 412 ) ); } } // Get the content-type. $type = array_shift( $headers['content_type'] ); // Include filesystem functions to get access to wp_tempnam() and wp_handle_sideload(). require_once ABSPATH . 'wp-admin/includes/file.php'; // Save the file. $tmpfname = wp_tempnam( $filename ); $fp = fopen( $tmpfname, 'w+' ); if ( ! $fp ) { return new WP_Error( 'rest_upload_file_error', __( 'Could not open file handle.' ), array( 'status' => 500 ) ); } fwrite( $fp, $data ); fclose( $fp ); // Now, sideload it in. $file_data = array( 'error' => null, 'tmp_name' => $tmpfname, 'name' => $filename, 'type' => $type, ); $size_check = self::check_upload_size( $file_data ); if ( is_wp_error( $size_check ) ) { return $size_check; } $overrides = array( 'test_form' => false, ); $sideloaded = wp_handle_sideload( $file_data, $overrides ); if ( isset( $sideloaded['error'] ) ) { @unlink( $tmpfname ); return new WP_Error( 'rest_upload_sideload_error', $sideloaded['error'], array( 'status' => 500 ) ); } return $sideloaded; } /** * Parses filename from a Content-Disposition header value. * * As per RFC6266: * * content-disposition = "Content-Disposition" ":" * disposition-type *( ";" disposition-parm ) * * disposition-type = "inline" | "attachment" | disp-ext-type * ; case-insensitive * disp-ext-type = token * * disposition-parm = filename-parm | disp-ext-parm * * filename-parm = "filename" "=" value * | "filename*" "=" ext-value * * disp-ext-parm = token "=" value * | ext-token "=" ext-value * ext-token = * * @since 4.7.0 * * @link https://tools.ietf.org/html/rfc2388 * @link https://tools.ietf.org/html/rfc6266 * * @param string[] $disposition_header List of Content-Disposition header values. * @return string|null Filename if available, or null if not found. */ public static function get_filename_from_disposition( $disposition_header ) { // Get the filename. $filename = null; foreach ( $disposition_header as $value ) { $value = trim( $value ); if ( strpos( $value, ';' ) === false ) { continue; } list( $type, $attr_parts ) = explode( ';', $value, 2 ); $attr_parts = explode( ';', $attr_parts ); $attributes = array(); foreach ( $attr_parts as $part ) { if ( strpos( $part, '=' ) === false ) { continue; } list( $key, $value ) = explode( '=', $part, 2 ); $attributes[ trim( $key ) ] = trim( $value ); } if ( empty( $attributes['filename'] ) ) { continue; } $filename = trim( $attributes['filename'] ); // Unquote quoted filename, but after trimming. if ( substr( $filename, 0, 1 ) === '"' && substr( $filename, -1, 1 ) === '"' ) { $filename = substr( $filename, 1, -1 ); } } return $filename; } /** * Retrieves the query params for collections of attachments. * * @since 4.7.0 * * @return array Query parameters for the attachment collection as an array. */ public function get_collection_params() { $params = parent::get_collection_params(); $params['status']['default'] = 'inherit'; $params['status']['items']['enum'] = array( 'inherit', 'private', 'trash' ); $media_types = $this->get_media_types(); $params['media_type'] = array( 'default' => null, 'description' => __( 'Limit result set to attachments of a particular media type.' ), 'type' => 'string', 'enum' => array_keys( $media_types ), ); $params['mime_type'] = array( 'default' => null, 'description' => __( 'Limit result set to attachments of a particular MIME type.' ), 'type' => 'string', ); return $params; } /** * Handles an upload via multipart/form-data ($_FILES). * * @since 4.7.0 * * @param array $files Data from the$_FILESsuperglobal. * @param array $headers HTTP headers from the request. * @return array|WP_Error Data from wp_handle_upload(). */ protected function upload_from_file( $files, $headers ) { if ( empty( $files ) ) { return new WP_Error( 'rest_upload_no_data', __( 'No data supplied.' ), array( 'status' => 400 ) ); } // Verify hash, if given. if ( ! empty( $headers['content_md5'] ) ) { $content_md5 = array_shift( $headers['content_md5'] ); $expected = trim( $content_md5 ); $actual = md5_file( $files['file']['tmp_name'] ); if ( $expected !== $actual ) { return new WP_Error( 'rest_upload_hash_mismatch', __( 'Content hash did not match expected.' ), array( 'status' => 412 ) ); } } // Pass off to WP to handle the actual upload. $overrides = array( 'test_form' => false, ); // Bypasses is_uploaded_file() when running unit tests. if ( defined( 'DIR_TESTDATA' ) && DIR_TESTDATA ) { $overrides['action'] = 'wp_handle_mock_upload'; } $size_check = self::check_upload_size( $files['file'] ); if ( is_wp_error( $size_check ) ) { return $size_check; } // Include filesystem functions to get access to wp_handle_upload(). require_once ABSPATH . 'wp-admin/includes/file.php'; $file = wp_handle_upload( $files['file'], $overrides ); if ( isset( $file['error'] ) ) { return new WP_Error( 'rest_upload_unknown_error', $file['error'], array( 'status' => 500 ) ); } return $file; } /** * Retrieves the supported media types. * * Media types are considered the MIME type category. * * @since 4.7.0 * * @return array Array of supported media types. */ protected function get_media_types() { $media_types = array(); foreach ( get_allowed_mime_types() as $mime_type ) { $parts = explode( '/', $mime_type ); if ( ! isset( $media_types[ $parts[0] ] ) ) { $media_types[ $parts[0] ] = array(); } $media_types[ $parts[0] ][] = $mime_type; } return $media_types; } /** * Determine if uploaded file exceeds space quota on multisite. * * Replicates check_upload_size(). * * @since 4.9.8 * * @param array $file $_FILES array for a given file. * @return true|WP_Error True if can upload, error for errors. */ protected function check_upload_size( $file ) { if ( ! is_multisite() ) { return true; } if ( get_site_option( 'upload_space_check_disabled' ) ) { return true; } $space_left = get_upload_space_available(); $file_size = filesize( $file['tmp_name'] ); if ( $space_left < $file_size ) { return new WP_Error( 'rest_upload_limited_space', /* translators: %s: Required disk space in kilobytes. */ sprintf( __( 'Not enough space to upload. %s KB needed.' ), number_format( ( $file_size - $space_left ) / KB_IN_BYTES ) ), array( 'status' => 400 ) ); } if ( $file_size > ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) { return new WP_Error( 'rest_upload_file_too_big', /* translators: %s: Maximum allowed file size in kilobytes. */ sprintf( __( 'This file is too big. Files must be less than %s KB in size.' ), get_site_option( 'fileupload_maxk', 1500 ) ), array( 'status' => 400 ) ); } // Include multisite admin functions to get access to upload_is_user_over_quota(). require_once ABSPATH . 'wp-admin/includes/ms.php'; if ( upload_is_user_over_quota( false ) ) { return new WP_Error( 'rest_upload_user_quota_exceeded', __( 'You have used your space quota. Please delete files before uploading.' ), array( 'status' => 400 ) ); } return true; } /** * Gets the request args for the edit item route. * * @since 5.5.0 * * @return array */ protected function get_edit_media_item_args() { return array( 'src' => array( 'description' => __( 'URL to the edited image file.' ), 'type' => 'string', 'format' => 'uri', 'required' => true, ), 'modifiers' => array( 'description' => __( 'Array of image edits.' ), 'type' => 'array', 'minItems' => 1, 'items' => array( 'description' => __( 'Image edit.' ), 'type' => 'object', 'required' => array( 'type', 'args', ), 'oneOf' => array( array( 'title' => __( 'Rotation' ), 'properties' => array( 'type' => array( 'description' => __( 'Rotation type.' ), 'type' => 'string', 'enum' => array( 'rotate' ), ), 'args' => array( 'description' => __( 'Rotation arguments.' ), 'type' => 'object', 'required' => array( 'angle', ), 'properties' => array( 'angle' => array( 'description' => __( 'Angle to rotate clockwise in degrees.' ), 'type' => 'number', ), ), ), ), ), array( 'title' => __( 'Crop' ), 'properties' => array( 'type' => array( 'description' => __( 'Crop type.' ), 'type' => 'string', 'enum' => array( 'crop' ), ), 'args' => array( 'description' => __( 'Crop arguments.' ), 'type' => 'object', 'required' => array( 'left', 'top', 'width', 'height', ), 'properties' => array( 'left' => array( 'description' => __( 'Horizontal position from the left to begin the crop as a percentage of the image width.' ), 'type' => 'number', ), 'top' => array( 'description' => __( 'Vertical position from the top to begin the crop as a percentage of the image height.' ), 'type' => 'number', ), 'width' => array( 'description' => __( 'Width of the crop as a percentage of the image width.' ), 'type' => 'number', ), 'height' => array( 'description' => __( 'Height of the crop as a percentage of the image height.' ), 'type' => 'number', ), ), ), ), ), ), ), ), 'rotation' => array( 'description' => __( 'The amount to rotate the image clockwise in degrees. DEPRECATED: Usemodifiersinstead.' ), 'type' => 'integer', 'minimum' => 0, 'exclusiveMinimum' => true, 'maximum' => 360, 'exclusiveMaximum' => true, ), 'x' => array( 'description' => __( 'As a percentage of the image, the x position to start the crop from. DEPRECATED: Usemodifiersinstead.' ), 'type' => 'number', 'minimum' => 0, 'maximum' => 100, ), 'y' => array( 'description' => __( 'As a percentage of the image, the y position to start the crop from. DEPRECATED: Usemodifiersinstead.' ), 'type' => 'number', 'minimum' => 0, 'maximum' => 100, ), 'width' => array( 'description' => __( 'As a percentage of the image, the width to crop the image to. DEPRECATED: Usemodifiersinstead.' ), 'type' => 'number', 'minimum' => 0, 'maximum' => 100, ), 'height' => array( 'description' => __( 'As a percentage of the image, the height to crop the image to. DEPRECATED: Usemodifiersinstead.' ), 'type' => 'number', 'minimum' => 0, 'maximum' => 100, ), ); } }

    • Buenos dias.

      Necesito ayuda ya que se ha quedado mi web bloqueada, en el inicio de la pagina aparece el cambio que estuve haciendo con el tema de envíos, y el carrito se ha quedado bloqueado y no deja realizar compras. Además me sale la pantalla blanco con ERROR HTTP 500
      Agradecería mucho me pudieseis ayudar soy nueva en este mundo.

      Gracias de antemano.

      La página con la que necesito ayuda: [accede para ver el enlace]

    Foro: Profesionales – Meetups
    En respuesta a: Error 404
    Iniciador del debate losnadie

    (@losnadie)

    1) Sale HTTP ERROR 500: Esta página no funciona. liantlatroca.com no puede gestionar la solicitud en este momento. Y el error 404 sale cuando entro directamente en la barra de direcciones.

    2) No lo sé. No tengo muchos conocimientos. Me encargo, en plan voluntario, del mantenimiento de la web de nuestra asociación de danza. Y el diseñador que nos la montó me aconsejó, hace 4-5 años aprox. que no actualizara nada. Y cuando al final me decidí actualizar el plugin Slider, pam, coincide con esta situación.

    3)¿El problema puede estar causado por la no actualización? Supongo que antes de nada sería conveniente hacer copia de seguridad, para no perder lo hecho hasta ahora. Pero no tengo muy claro por donde empezar.

    Gracias x contestar.

Viendo 15 resultados - del 16 al 30 (de un total de 688)