• Resuelto delerean

    (@delerean)


    Hola!!

    Tengo un problemilla que no sé cómo resolver. Tengo un formulario (GF) en frontend donde los usuarios registrados (rol suscriptor) lo envían y se crea un CPT en borrador.

    He añadido funciones para habilitar al rol suscriptor la capacidad upload_files y edit_post para poder añadir imágenes. También para que solo pueda ver las suyas en la biblioteca y no todas.

    El caso que no funciona y me da error de permisos al subir la imagen:

    Lo siento, no tienes permisos para adjuntar archivos a esta entrada.

    Confirmado que la carpeta existe, tiene permisos de escritura, y que el usuario tiene edit_post y upload_files activado.

    ¿Alguna ayuda? Muchas gracias

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador José Arcos

    (@josearcos)

    Hola @delerean, ¿el post se crea correctamente? ¿El error sólo ocurre al subir las imágenes? ¿Puedes compartir las funciones con las que has asignado esos permisos?

    Saludos.

    Iniciador del debate delerean

    (@delerean)

    Hola José,

    Sisi, el post se crea perfectamente. Es simplemente que en el campo para el contenido del CPT quiero que el usuario pueda subir imagenes. Para ello he añadido el botón de «Añadir objeto» con WP_editor():

    add_action( 'gform_field_input', 'kmk_gforms_wp_editor', 10, 5 ); 
    function kmk_gforms_wp_editor( $input, $field, $value, $lead_id, $form_id ) {
    	if( $field->cssClass == 'kmk-editor' ) {
    		ob_start();
    		wp_editor( $value, "input_{$form_id}_{$field->id}",
    	  		array(
    				'media_buttons' => true,
    				'textarea_name' => "input_{$field->id}"
    			)	);
    		$input = ob_get_clean();
    	}
    	return $input;
    }

    Hasta aquí todo OK. El botón aparece y se carga el popup de la biblioteca.

    Después he añadido las CAPs de upload_files y edit_post con el plugin User Role Editor. También he probado a dar los permisos con el siguiente código e igual:

    add_filter( 'ajax_query_attachments_args', 'show_current_user_attachments', 10, 1 );
    function show_current_user_attachments( $query = array() ) {
        $user_id = get_current_user_id();
        if( $user_id ) {
            $query['author'] = $user_id;
        }
        return $query;
    }

    Es solo para que el usuario pueda subir imágenes, el resto del formulario con el mapeo a los custom fields del CPT va de lujo.

    Gracias por la ayuda!

    • Esta respuesta fue modificada hace 5 años, 10 meses por delerean.
    • Esta respuesta fue modificada hace 5 años, 10 meses por delerean.
    Iniciador del debate delerean

    (@delerean)

    Ah! Y también he probado con ese pequeño hack que me he encontrado googleando y tampoco:

    add_filter('ure_restrict_edit_post_type', 'exclude_posts_from_edit_restrictions');
    function exclude_posts_from_edit_restrictions($post_type) {
      $restrict_it = true;
      if (current_user_can('upload_files')) {
          if ($post_type=='attachment') {
    	        $restrict_it = false;
          }
      }
      return $restrict_it;
    }

    Ese problemas me lo encontré hace tiempo, lo siento pero no me acuerdo de los detalles.

    Lo que sí que creo recordar es que una parte del problema era que las funciones del FileSystem API por defecto no funcionan en el front y había que cargarlas a mano

    Iniciador del debate delerean

    (@delerean)

    Hola Nilo,

    Efectivamente el Filesystem API no era la solución. Pero también efectivamente, tirando por ahí he llegado a la solución, así que millones de gracias por intentarlo porque has guiado por el buen camino a un hombre perdido y desesperado 🙂

    Además de paso he aprendido un montón más del core de WP, del WP_Filesystem, y de cómo programar mejor (mira qué hora es y llevaba leyendo desde que me has contestado xD).

    Dejo el código que me ha salvado la vida, no sabría explicar 100% por qué funciona porque el error era de permisos y no veo la relación, pero hasta donde llego a entender, es necesario cargar la función wp_enqueue_media() para cargar correctamente el JS necesario para el Media Uploader (+ info aquí)

    function add_media_upload_scripts() {
        if ( is_admin() ) {
             return;
           }
        wp_enqueue_media();
    }
    add_action('wp_enqueue_scripts', 'add_media_upload_scripts');

    Si alguien puede arrojar más luz sobre el asunto bienvenido sea.

    PD: Uso Machete en mis WP y está genial! 😀

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘edit_post habilitado pero error al subir media en frontend’ está cerrado a nuevas respuestas.