Skip Navigation

[Résolu] Limitar el agregar un numero de Fichas a un Usuario Logueado.

This support ticket is created Il y a 5 années et 2 mois. There's a good chance that you are reading advice that it now obsolete.

This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.

Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.

No supporters are available to work today on Toolset forum. Feel free to create tickets and we will handle it as soon as we are online. Thank you for your understanding.

Sun Mon Tue Wed Thu Fri Sat
- 7:00 – 14:00 7:00 – 14:00 7:00 – 14:00 7:00 – 14:00 7:00 – 14:00 -
- 15:00 – 16:00 15:00 – 16:00 15:00 – 16:00 15:00 – 16:00 15:00 – 16:00 -

Supporter timezone: Europe/London (GMT+01:00)

This topic contains 14 réponses, has 2 voix.

Last updated by angelR-2 Il y a 5 années et 1 mois.

Assisted by: Nigel.

Auteur
Publications
#1197935
Limitar numero de fichas Usuario Logeado.jpg

La idea es que cada Empresa y Profesional que este “logeado” pueda agregar sus propias fichas, pero limitándoles a agregar más de las permitidas.
Posteriormente las podrán editar, pero no Eliminarlas.

Muchas gracias.

Un Saludo.
Y que tengáis un buen día.

#1198426

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Hola

Tienes un formulario para publicar entradas que tiene un campo de fichas donde se puede añadir multiples, ¿verdad?

Para limitar cuantas fichas pueden agregar tendrás que incluir código particular en el sección custom JS de cada formulario afectado (p.j. el formulario para publicar entradas y el de editar entradas).

( function( $ ) {
	$( document ).ready( function(){

		$('.js-wpt-field-items').on('click', '.wpt-repdelete,.js-wpt-repadd', function(e){

			var max_reps = 5;

			var target = $(event.target);

			if ( $(event.target).is('.js-wpt-repadd') ){
				max_reps --;
			} else {
				max_reps ++;
			}

			fields = $('.wpt-repctl');

			if ( fields.size() >= max_reps ){
				$('.js-wpt-repadd').hide();
			} else {
				$('.js-wpt-repadd').show();
			}
		})
	});
})( jQuery );

Puedes editar el limite por cambiar el valor de "max_reps".

#1198920
Agregar Ficha de Empresa con codigo JS.jpg
Agregar Ficha de Empresa.jpg

Hola.
He colocado el código como me habéis indicado pero sigo pudiendo crear fichas aunque lo he limitado a 3.
Te envió dos capturas de pantalla.
Un saludo.

#1199075

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

¿He mal entendido?

Pensaba que querías limitar cuantos campos de ficha (archivo) se podría agregar a un formulario, pero ahora me parece que lo que quieres es limitar cuantas veces pueden enviar un formulario para publicar un tipo de entrada "Ficha de Empresa".

¿Es correcto?

#1199336

Exactamente, limitar cuantas veces pueden enviar un formulario para publicar un tipo de entrada como "Fichas de Empresa".
Perdona por no habértelo explicado bien.
Si me puedes indicar como hacerlo, te lo agradecería mucho.
Un Saludo
Que tengas un buen día.

#1199715

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Vale. Pues en este caso tendrás que usar el API de Forms y el filtro cred_form_validate: https://toolset.com/documentation/programmer-reference/cred-api/#cred_form_validate

Aquí tienes un ejemplo:

/**
 * Custom form validation
 */
function tssupp_form_validation($error_fields, $form_data) {

	$max = 3;
	$error = "You have already submitted the maximum number of posts";

	if (in_array($form_data['id'], array(88))) {

		// Get posts of this type authored by current user
		$posts = get_posts(array(
			'post_type' => $form_data['post_type'],
			'author' => get_current_user_id(),
			'post_status' => 'publish',
			'nopaging' => true,
		));
		$results = count($posts);

		//split error fields into separate arrays
		list($fields, $errors) = $error_fields;

		// tests
		if ($results >= 3) {

			$errors['post_title'] = $error;
		}

		$error_fields = array($fields, $errors);
	}

	return $error_fields;
}
add_filter('cred_form_validate', 'tssupp_form_validation', 10, 2);

Tendrás que editar las variables $max y $error y el ID del formulario pertinente (88 en este ejemplo).

Lamentablemente el error es poco editable, pero tendrás la funcionalidad querida.

#1205129

Hola de nuevo.
En primer lugar te pido disculpas, he introducido el código que me has enviado, pero no me funciona, seguro que
algo estoy haciendo mal.

Nuestra web esta todavía en desarrollo y pensamos lanzarla a mitad del próximo mes de Marzo.

Te hemos creado un nombre de usuario como administrador para que puedas entrar y ver el tema.

Nota: Puedes agregar las fichas que creas conveniente para probar.

[edit]

Perdona mi atrevimiento, No se si vosotros hacéis esto a vuestros clientes.
Tenemos otros Proveedores de plugins que si lo han echo y nos han ayudado muchísimo.

Otro problema importante que tenemos es: AL AGREGAR: "Entradas, Empresas, Profesionales, Novedades y Promociones". "No suben las Imágenes", los demás campos si. "Anteriormente si lo hacían perfectamente".

Muchas gracias por toda la ayuda que aportáis a los que no somos muy expertos.

Un saludo afectuoso
Angel Reinosa

New threads created by Nigel and linked to this one are listed below:

https://toolset.com/fr/forums/topic/split-problema-publicar-imagenes-por-un-formulario/

#1205559

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Hola Angel

¿Dónde has puesto el código?

Esperaba verlo en Toolset > Configuración > Código personalizado.

El problema de imágenes, ¿hablas de publicar entradas por un formulario del front-end?

#1205824
Agregar Ficha de Empresa con codigo JS.jpg

El código lo he colocado en el formulario "Agregar Ficha de Empresa" y en
"Agregar Ficha de Profesional"." en la parte del "JS editor" .

No entiendo como ponerlo en: Toolset > Configuración > Código personalizado.

El problema de las imágenes: Si hablo de publicar entradas por un formulario del front-end.

#1206212

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Hola Angel

Este código es PHP, no se puede agregarlo como si fuera JavaScript.

Tienes que añadir un snippet en Toolset > Configuración > Código personalizado, ó editar el archivo functions.php del tema.

(Es necesario editar el ID del formulario, "88" en la muestra.)

Voy a dividir el hilo para continuar con el tema de los imágenes.

#1206283
snippet fichaempresa.jpg

Ok. Entendido.

Creando snippet "fichaempresa"

Te mando una captura de pantalla en la que puedes ver el código a la izquierda y a la derecha esta la ventana para introducirlo.

Por favor me podrías indicar, ¿como debería quedar el código dentro de esa ventana antes de guardarlo?.
Y si dejo todo lo que hay seleccionado. como:
Run always ( . ) A demanda ( )

Run context: Front-end (X) Administración de WordPress (X) Llamadas AJAX (X).

Luego tengo que crear otro igual para la Ficha para agregar Profesionales. "fichaprofesiona".

Gracias por tu paciencia.

Un saludo

#1206406

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Screenshot 2019-02-26 at 15.41.02.png

Debe aparecer como se ve en el pantallazo (no olvides activar el snippet).

En lugar de repetir el código puedes modificarlo para que afecta a formularios multiples así:

/**
 * Custom form validation
 */
function tssupp_form_validation($error_fields, $form_data) {
 
    $max = 3;
    $error = "Ya has superado el numero maximo de envíos";
 
    if (in_array($form_data['id'], array( 243, 299 ))) {
 
        // Get posts of this type authored by current user
        $posts = get_posts(array(
            'post_type' => $form_data['post_type'],
            'author' => get_current_user_id(),
            'post_status' => 'publish',
            'nopaging' => true,
        ));
        $results = count($posts);
 
        //split error fields into separate arrays
        list($fields, $errors) = $error_fields;
 
        // tests
        if ($results >= 3) {
 
            $errors['post_title'] = $error;
        }
 
        $error_fields = array($fields, $errors);
    }
 
    return $error_fields;
}
add_filter('cred_form_validate', 'tssupp_form_validation', 10, 2);

(Pero todos tendrán el mismo limite el mensaje de error.)

#1207403

Hola de nuevo.
He creado dos snippets "fichaempresa"y "fichaprofesional" porque los limites son diferentes para cada formulario.

He activado el de "fichaempresa" que limita a tres las fichas a agregar.

Desde el front-end he tratado de agregar la que seria la cuarta ficha y este es el error que he recibido:

"El servidor encontró un error interno o una mala configuración y no pudo completar su solicitud.
Póngase en contacto con el administrador del servidor e infórmeles de la hora en que ocurrió el error y de cualquier cosa que haya hecho que pueda haber causado el error.
Puede haber más información sobre este error en el registro de errores del servidor.
Además, se encontró un error 500 Error interno del servidor al intentar usar un ErrorDocument para manejar la solicitud.
Un saludo"

Otra cosa. No puedo activar el snippet "fichaprofesional" , Si lo hago ya no veo la web.
Lo tengo desactivado.

Un saludo
Ángel Reinosa

#1207470

Nigel
Supporter

Languages: Anglais (English ) Espagnol (Español )

Timezone: Europe/London (GMT+01:00)

Screenshot 2019-02-28 at 10.42.08.png

Hola Angel

Primero, no se puede declarar funciones con el mismo nombre, entonces será necesario cambiar por lo menos uno de los snippets, p.j.:

function tssupp_form_validation_profesional($error_fields, $form_data) {
 
...
...

add_filter('cred_form_validate', 'tssupp_form_validation_profesional', 10, 2);

(Nota que tenia un pequeño fallo en el código, debes cambiar esta linea así:

        if ($results >= $max) {

para que coge el valor max declarado al principio.)

En la copia del sitio que tengo funcionaba el código (ve pantallazo).

Si no funciona en el sitio tuyo, el mensaje indica que se encuentra errores de PHP. Por favor inspecciona tus registros de errores y dime lo que encuentras.

Puede ser necesario hacer una prueba con todos los plugins menos Toolset desactivado para ver si existe un conflicto entre Toolset y otro plugin.

#1207980

My issue is resolved now. Thank you!

This ticket is now closed. If you're a WPML client and need related help, please open a new support ticket.