Skip Navigation

[Resolved] Al crear una entrada poder seleccionar un autor.

This support ticket is created 4 years, 9 months ago. 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.

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+00:00)

This topic contains 8 replies, has 2 voices.

Last updated by Rafael Corts 4 years, 8 months ago.

Assisted by: Nigel.

Author
Posts
#1593967

Hola Nigel, para poder filtrar a los registros de una web, he creado una entrada con el nombre de cliente, estas entradas la genera el administrador, pero necesito que en el formulario para crear un nuevo cliente se pueda ubicar un autor y así podré relacionar cada cliente con un usuario registrado y filtrar a las personas registradas. ¿como puedo crear el campo de autor en un formulario de entrada?
Saludos.
Rafa Corts

#1595223

Nigel
Supporter

Languages: English (English ) Spanish (Español )

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

Screenshot 2020-04-22 at 07.39.04.png

Hola Rafa

Con un formulario de entrada no hay opción de especificar el autor, es siempre el usuario corriente.

Para poder seleccionar un autor hay dos partes

1. añadir un select dropdown con usuarios para elegir
2. usar el hook cred_save_data para tomar este valor y actualizar la entrada con el nuevo autor

Para uno, tendrás que añadir un campo genérico select al formulario. Ve el pantallazo para un ejemplo con la configuración.

Nota que he puesto un View para generar las opciones (nota el formato JSON de las opciones requerido).

Este View solicita usuarios (puedes especificar los roles) y necesita un formato específico para generar el JSON, así:

[wpv-layout-start]
	[wpv-items-found]
	<!-- wpv-loop-start -->
		<wpv-loop>
			[wpv-item index=other]
				{"value":"[wpv-user field='ID']","label":"[wpv-user field='display_name']"},
			[wpv-item index=last]
				{"value":"[wpv-user field='ID']","label":"[wpv-user field='display_name']"}
		</wpv-loop>
	<!-- wpv-loop-end -->
	[/wpv-items-found]
	[wpv-no-items-found]
		<strong>[wpml-string context="wpv-views"]No items found[/wpml-string]</strong>
	[/wpv-no-items-found]
[wpv-layout-end]

Asegurate que tienes marcado la opción "Disable the wrapping DIV around the View".

Meter este View en el formulario como ves en el pantallazo.

Compruebe que funciona como esperado en el front-end.

Para dos, hemos usado el hook cred_save_data varios veces. Ya eres capaz de coger el valor de este campo (del objeto $_POST) y usar wp_update_post para actualizar el autor?

#1595283
Captura de pantalla 2020-04-22 10.03.43.png
Captura de pantalla 2020-04-22 10.02.27.png

Hola Nigel, he probado de hacer la primera opción con el formulario selec, la vista se genera bien te adjunto el resultado pero hay algo que no funciona. en el formulario no aparece el desplegable con los diferentes autores. te adjunto de la configuración del selec para que veas que esta correcto.
El nombre de la vista és: [php][wpv-view name="selec-users"][php]
Saludos.
Rafa Corts

#1595379

Nigel
Supporter

Languages: English (English ) Spanish (Español )

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

Según el pantallazo tienes un typo, has puesto wpv-wiew en lugar de wpv-view...

#1595499

Hola Nigel, tienes toda la razón estaba poniendo el texto incorrecto, ahora ya consigo ver el formulario bien, pero no me ejecuta la orden correcta y mantiene el autor del registro del usuario logeado.
Saludos.
Rafa Corts

#1595559

Nigel
Supporter

Languages: English (English ) Spanish (Español )

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

2. usar el hook cred_save_data para tomar este valor y actualizar la entrada con el nuevo autor

¿Hiciste este?

#1595605

Perdona, no lo he entendido bien, ¿se deben de hacer las dos opciones para hacer el cambio de autor? Yo creía que era o una o la otra , ahora lo entiendo.
Entonces no seria mas practico a la hora de crear un registro de un cliente que con la función hook cred_save_data se creara una entrada de "clientes" con el mismo nombre del autor del registro.
Por ejemplo tengo un formulario de usuario para crear un registro de cliente, entonces lo que podría hacer seria, que en el momento que se crea un nuevo registro con la función "cred_save_data" se generara una entrada en el Post Type con solo el nombre de la persona en el titulo, y que este con el mismo el autor. Para así no haber de hacerlo en dos pasos.
Solo necesitaría para la entrada el titulo [wpv-post-title] que seria el nombre de la persona que se registra y poner como autor el mismo [wpv-post-author] de la entrada.
Con este código se podría hacer?

//Create a dynamic post title by the CRED form.
add_action('cred_save_data', 'nuevo_registro' ,10,2 );
function nuevo_registro($post_id,$form_data) {
    if ($form_data['id']==9999) {
        $name = get_post_meta($post_id, 'wpcf-name', true);
        $email = get_post_meta($post_id, 'wpcf-email', true);
        $title= $name. '-' . $email;
        $args = array('ID' => $post_id, 'post_title' => $title);
        wp_update_post($args);
    }
}

Saludos.
gracias por la paciencia.
Rafa Corts

#1597661

Nigel
Supporter

Languages: English (English ) Spanish (Español )

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

Entiendo.

Lo que necesitas entonces, para publicar una entrada de perfíl automáticamente al registar un nuevo usuario es algo así:

add_action('cred_save_data', 'tssupp_form_submit', 10, 2);
function tssupp_form_submit($user_id, $form_data)
{

    if (in_array($form_data['id'], array(366))) { // Editar el ID

        $user = get_userdata( $user_id);

        $post = array(
            'post_type'     => 'profile', // Editar
            'post_author'   => $user_id,
            'post_title'    => $user->display_name,
            'post_status'   => 'publish'
        );
        wp_insert_post( $post );
    }
}
#1599871

My issue is resolved now. Thank you!