Skip Navigation

[Resuelto] ARREGLOS FORMULARIO DE ENTRADA

This support ticket is created hace 2 años, 7 meses. 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 28 respuestas, has 2 mensajes.

Last updated by vincenzoD-2 hace 2 años, 6 meses.

Assisted by: Nigel.

Autor
Mensajes
#2166399

Hola Nigel, Tengo unos problema con el formulario de entrada que me gustaría solucionar.

1. ¿Cómo podría hacer para que en el título de las entradas se ponga automáticamente el número de tel. del anunciarte?

2. ¿Hay una manera para que el anunciante no ponga títulos que ya han sido publicados?

3. ¿Hay una manera para que el anunciante no ponga descripciones que ya han sido publicadas?

Muchas Gracias por tu atención

#2168325

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

Hola Vincenzo

Disculpe el retraso, no pude trabajar hoy.

Puedo ayudarte con la 1, es cuestión de usar la función del API cred_save_data para añadir el número de teléfono (que es un campo del formulario, ó del usuario?).

Para la 2 y la 3, ¿quieres decir que no pueden subir un anuncio con un título ó descripción exactamente igual que un anuncio anterior?

También debe ser posible con código y la función del API cred_form_validate.

#2170045

Es un campo del formulario.

Para 2 y 3 me gustaría que si un usuario quiera poner mismo título o descripción de otro anuncio no pueda hacerlo y le salga un mensaje de error personalizado.

Muchas Gracias

#2170101

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

Me equivoque, no es posible hacer una consulta por el contenido para comparar el contenido nuevo con el anterior.

(La "descripción" es el campo normál de contenido, ¿correcto?)

Puedes hacer la 1 así:

/**
 * Añadir número de teléfono al título
 */
add_action( 'cred_save_data','ts_custom_post_title', 10, 2 );
function ts_custom_post_title( $post_id, $form_data ) {

    //Editar
    $form_id = 123;
    $campo_tel = 'telefono';

    if ( $form_data['id'] == $form_id ) {

        $tel = get_post_meta( $post_id, 'wpcf-'.$campo_tel, true );
        $post = get_post( $post_id );

        $title = $post->post_title . ' : ' . $tel;

        $args = array( 'ID' => $post_id, 'post_title' => $title );
        wp_update_post( $args );
    }
}

(Debes editar el ID del formulario y el nombre del campo de teléfono.)

Puedes hacer la 2 así:

/**
 * Rechaza entradas con títulos existentes
 */
add_filter( 'cred_form_validate', 'ts_form_validate', 10, 2 );
function ts_form_validate( $error_fields, $form_data )
{
    // Editar
    $form_id = 123;
    
    list($fields,$errors) = $error_fields;

    if ( $form_data['id'] == $form_id )
    {
        $title = $fields['post_title']['value'];
        $title_exists = get_posts( [ 'title' => $title ] );

        if ( !empty( $title_exists ) ) {
            // Set error message for title
            $errors['post_title'] = 'Anuncio con este título ya publicado';
        }

    }
    //return result
    return array($fields,$errors);
 
}
#2170643

¡Okay, Gracias Nigel!
Donde pongo el código en el "JS editor" del formulario?

#2170679

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

No, es PHP.

Puedes añadir el código en Toolset > Configuración > Código personalizado.

#2170759

Perfecto, ya que hablamos de formulario, habíamos puesto que un usuario puede poner hasta 3 anuncios.
¿Me gustaría que algunos usuarios (por ejemplo publicistas) pudieran publicar anuncios ilimitados es posible?

Muchas Gracias

#2171767

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

¿Puedes recordarme de como imponemos tal restricción?

¿Hay algún código añadido?

#2174771

Hola Nigel perdona si te contesto ahora no he podido antes.

Si habíamos puesto un PHP, limitando a 3 anuncios , y un bloque condicional que si el usuario intentaba poner el 4 anuncio le salía un mensaje con escrito "límite de anuncios alcanzado"

Aquí el hilo de referencia: https://toolset.com/es/forums/topic/como-limitar-el-numero-de-anuncio/

#2174791

También, y la secunda vez que me pasa si pongo el código personalizado para poner el número en el título la página me va en error crítico. ¿Por qué? Tengo que restaurar el backup para poder hacerla funcionar de nuevo...

#2176033

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

Bien, ahora recuerdo.

Me parece que podemos cambiar el shortcode que conta las entradas publicadas, y para ciertos usuarios siempre devuelve un valor menos de trés.

¿Pero cómo identificar tales ciertos usuarios?

Si tienes errores al añadir código, ¿qué son los errores? Los errores identificarán la causa.

#2176985

1)Vale, podemos hacer esto: "Me parece que podemos cambiar el shortcode que conta las entradas publicadas, y para ciertos usuarios siempre devuelve un valor menos de trés."

Los usuario normales que no pueden hacer más que tres anuncios son perfiles "AUTOR" y los usuario que pueden hacer más de 3 es un perfil "COLABORADOR" . En teoría podríamos poner el perfil de "COLABORADOR" desde back and nosotros.

En teoría un publicador nos contacta para varios anuncios así que nosotros de administración podríamos cambiar directamente el de "AUTOR" a "COLABORADOR" cuando nos contacte.

2)Por el tema del error no me da ningún error de hecho siempre hago un check.
¿Puede ser que pase porque creo más códigos personalizados con el mismo campo de teléfono?

Me explico mejor creo un código personalizado para el formulario Gratis, uno para el formulario Premium y uno para el formulario de Edición de anuncio porque cada form tiene ID distinto...
¿Será esto que crea conflicto?

#2178453

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

He modificado el código del shortcode para devolver cero cuando el usuario tiene rol 'colaborador', así:

add_shortcode('count-posts', function ($atts = []) {
 
    // provide defaults
    $atts = shortcode_atts(
        array(
            'types' => 'post',
        ),
        $atts
    );
 
    $post_types = explode( ",", $atts['types'] );

    $user = wp_get_current_user();
 
    $count = count_user_posts( $user->ID, $post_types, true );

    if ( in_array( 'colaborador', $user->roles ) ){
        $count = 0;
    }

    return $count;    
});

Sobre el error, es poco probable que resulta por referir al mismo campo varios veces.

Más probable sería un error por que declaras una función con un nombre ya utilizado, ¿puede ser posible?

#2179339

Hola,

1) He sustituido el código y hecho una prueba con un usuario colaborador, pero sigue limitando el número de anuncios. ¿Debo cambiar algo en el bloque condicional?

2) En teoría el nombre de la función varia, unque porque si pusiera el mismo nombre me daría error desde un principio. Es posible poner más que un form en el mismo código que tenga el mismo campo? Por ejemplo:

"//Editar
$form_id = 123, 124, 125;
$campo_tel = 'telefono';"

#2182599

Nigel
Supporter

Languages: Inglés (English ) Español (Español )

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

1. A ver si funciona el código correctamente: como prueba, añade el shortcode directamente a la página (para imprimir su resulta) y comprueba que sale correcto.

2. Puedes re-utilizar el mismo código en varios formularios, así:

    if ( in_array($form_data['id'], array( 123, 124, 125 ) ) ) {

        // el código
    }
This ticket is now closed. If you're a WPML client and need related help, please open a new support ticket.