Skip Navigation

[Waiting for user confirmation] Crear una condicional con una relación

Este es el foro de soporte técnico para Toolset: un paquete de plugines para el desarrollo de sitios WordPress sin escribir PHP.

Cualquier persona puede leerlo, pero solo los clientes de Toolset pueden publicar en este foro. El soporte de Toolset atiende 6 días a la semana, 19 horas por día.

Our next available supporter will start replying to tickets in about 1.16 hours from now. Thank you for your understanding.

Etiquetado: 

This topic contains 13 respuestas, has 3 mensajes.

Last updated by Minesh hace 3 días, 20 horas.

Assigned support staff: Minesh.

Autor
Mensajes
#1772233

Hola Nigel, quiero crear una condicional de una relación que se ejecute en el momento que hay valoraciones en la unidad del bucle. Y si no hay valoraciones que no entre.

 [wpv-conditional if="( $(wpcf-valoracio-unitat).item(@primer-eso-valoracio.parent) gt '0' )"]
[/wpv-conditional] 

creo que debería de ser esta condicional pero no consigo que funcione. En el caso que sea mayor de zero que entre.
Haber que te parece.
Saludos.
Rafa Corts

#1772981

Nigel
Supporter

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

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

Hola Rafa

Me puedes clarificar, ¿qué es el contexto? Este condicional se encuentra en una plantilla de...?

¿Y el campo que quieres probar—wpcf-valoracio-unitat—pertenece a qué tipo de entrada?

#1773063

Hola Nigel, tengo dos entradas "unidades didácticas" y "valoraciones", entre estas dos entradas he creado una relación "Primer ESO valoración" . También las valoraciones tienen una jerarquia padre hijo. las "Unidades didácticas" es el padre y las "Valoraciones" son los hijos.

Entonces lo que quiero hacer es una condicional que cuando una unidad didáctica tenga una valoración entre en la condición y se muestre el numero de valoraciones de la unidad en concreto.
y si en el caso que una unidad no tiene ninguna Valoración que no entre en la condición y no muestre el código que esta dentro de la condición en formato estrellitas.
Rafa Corts

#1773157

Nigel
Supporter

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

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

OK, desde el padre quieres saber si tiene hijos.

Es más complicado que el contrario—desde un hijo saber si tiene un padre—por que puede tener varios hijos y entonces no pruebas sola una entrada.

Puedes registrar un shortcode particular que da el número de entradas asociadas, ve hidden link

Registra este shortcode en Toolset > Settings > Front-end content para poder usarlo en un condición.

Entonces puedes usar el shortcode particular 'connections' en la condición. Sea necesario editar la condición manualmente para poder incluir el atributo que especifica la relación, p.j. [connections relationship='primer-eso-valoracio']

Dime como sale...

#1778489

Hola Nigel, la condición seria esta y funciona.

[wpv-conditional if="( '[connections relationship="primer-eso-valoracio"]' ne '' )"]
 <tr>
    <td><img class="rc_estrella_v" src="<em><u>hidden link</u></em>" width="20" class="" /></td>
    <td><img class="rc_estrella_v" src="<em><u>hidden link</u></em>" width="20" class="" /></td>
    <td><img class="rc_estrella_v" src="<em><u>hidden link</u></em>" width="20" class="" /></td>
    <td><img class="rc_estrella_v" src="<em><u>hidden link</u></em>" width="20" class="" /></td>
    <td><img class="rc_estrella_v" src="<em><u>hidden link</u></em>" width="20" class="" /></td>
  </tr>
 [/wpv-conditional]

El problema ahora estoy viendo que para generar las valoraciones se deberían contar por separado. que cada una de las opciones tenga su propio Schortcode (5 en total) y así poder hacer una condición que aparezca cada uno de los gráficos de las estrellitas.

Primero todo estarán en oculto y cuando un usuario valore en una de las opciones entonces la condición aparecerá el gráfico de las estrellas con el numero de valoraciones en paréntesis.

Por ejemplo si la opción "bé" nadie ha valorado con esta opción que no aparezca el gráfico de las 4 estrellitas.
y si en la opción "normal" hay mas de una valoración entonces que aparezca el gráfico de las estrellitas.

He probado de generar una vista para que se filtre por cada una de las valoraciones y aparezca el numero de valoraciones, pero cuando lo utilizo en la condición me sucede el mismo caso que se queda en un bucle y no llega a guardarse.
Muy raro, el código seria así:

 [wpv-conditional if="( '[wpv-view name="valoracions-molt-be"]' ne '' )"]
    Grafico estrellas
     [/wpv-conditional]

Her provado con el simbolo de $ la variable o con las comillas
 [wpv-conditional if="( $[wpv-view name="valoracions-molt-be"]  ne '' )"]
    Grafico estrellas
     [/wpv-conditional]

 

Opciones valoraciones:

1. Molt bé
2. Bé
3.normal
4.Regular
5.Malament

Haber si se puede poner en el schortcode que filtre por tipo de valoración? o mirar de que la vista que he generado se pueda utilizar en la condición.
Haber que posibilidades tengo.

Saludos.
Rafa Corts

#1780197

Nigel
Supporter

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

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

Estoy muy confudido.

Tienes una relación unidades << valoraciones.

Una unidad puede tener tantas valoraciones.

¿Quien hace las valoraciones? Puede ser entre zero y... cien ó más valoraciones...?

Me preguntaba como probar si una unidad tiene valoraciones ó no para controlar la salida de unas estrellitas.

("...cuando una unidad didáctica tenga una valoración entre en la condición y se muestre el numero de valoraciones de la unidad en concreto... ...y si en el caso que una unidad no tiene ninguna Valoración que no entre en la condición y no muestre el código que esta dentro de la condición...")

El shortcode que estaba sugiriendo cuenta cuantas entradas hijas existen (cero, una... cien...), pero no tiene nada que ver con campos de tales valoraciones.

Me parece que quieres guardar un campo númerico en cada valoración y...¿qué?... mostrar unas estrellitas que corresponden al medio de estos campos en todas las valoraciones...?

#1785437

Hola Nigel, haber si me puedo explicar mejor.
Tengo unas entradas que son "unidades formativas" los usuarios acceden y obtienen unos conocimientos. entonces también he creado una entrada de "valoraciones", para que estos usuarios valoren las unidades formativas. Estas dos entradas tienen una relación de 1 a infinito.
una unidad puede tener infinito valoraciones de cada uno de los usuarios. por eso la relación para que cuando un usuario evalúe la unidad se guarde la valoración asociada a la unidad.
Estas valoraciones he creado un listado de 5 opciones.
1- muy bien
2- bien
3- norma
4- regular
5- mal
Representado con estrellitas, adjunto imagen para que lo veas.
Lo que te pedi es que necesitaba una función para que contara el numero de valoraciones de cada unidad utilizando la relación.
Pero he visto que debería modificar la función para que también filtre por autor. ya que ahora tal como lo tengo si un usuario valora una unidad concreta la función me marcara 1 y entonces todos los usuarios que vayan a esta unidad no podrán valorarla ya que la función no dejara que muestre el formulario para valorarla.
Entonces como podría modificar la función para que me contabilize las valoraciones de cada autor. y así la condición se ejecutaría según si ya ha valorado o no el usuario, en el caso que el usuario haya valorado una unidad formativa en concreto, la condición no le dejará entrar y no mostrará el formulario para valorar otra vez y en el caso que no haya valorado la unidad entonces la condición le permitirá mostrar el formulario para valor la unidad.
Vaya en resumen la función que me has pasado como puedo hacer para que filtre por autor y indique las valoraciones que haya realizado cada autor.
Muchas gracias por la paciencia.
Rafa Corts

#1785465
#1786119

Nigel
Supporter

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

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

En cuestion de solo mostrar el formulario si el usuario aún no ha mandado una valoración, creo que la mejor solución es usar una vista, no una condición.

Prepara una vista de valoraciones con filtro del padre unidad y con filtro de autor (el usuario corriente) y en la salida no muestra nada en el caso de que hay resultados y en la sección wpv-no-items-found mete el formulario para añadir una valoración allí.

Si te he entendido bien lo que falta es una función que calcula el medio de las valoraciones conectado a un unidad, ¿correcto?

¿Dónde guarda el número de la valoración? Valoración es un tipo de entrada, pero ¿tiene un campo que guarda el número de 1 - 5?

#1788641

Hola Nigel, ya tenia una vista creada pero la he modificado para que si no hay resultados aparezca el formulario. Perfecto.
ahora solo me queda hacer lo del promedio, el campo donde se guarda la valoración es un selección , con cinco opciones del 1 al 5
adjunto imagen.
Saludos.
Rafa Corts

#1790143

Nigel
Supporter

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

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

Disculpe Rafa, no pude contestar ayer, teníamos problemas con el foro.

Nos he dejado muy liado, y como este es código particular vuelvo a contestar lo antes posible cuando he tratado con unos otros hilos.

#1822379

Nigel
Supporter

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

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

Hola Rafa

He vuelto a pensar en este, tuve un momento disponible.

Me parece que necesitas un shortcode particular para sumar y calcular el medio de las valoraciones que pertenecen a un curso.

Te ofrece un ejemplo, pero tengo que decirte que es código particular fuera del soporte.

Tendrás que editar la relación y los campos como sea necesario...

add_shortcode('valoracion', function () {

    global $post;
    $total = 0;
    $count = 0;
    $average = "";

    $valoraciones = toolset_get_related_posts( $post, 'primer-eso-valoracio', array(
        'query_by_role' => 'parent',
        'role_to_return' => 'child'
    ) );

    if ( !empty( $valoraciones ) ){
        foreach ($valoraciones as $valoracion) {
            
            $valor = get_post_meta( $valoracion->ID, 'wpcf-valoracion-unitats', true );

            if ( isset( $valor ) ){
                $count++;
                $total += $valor;
            }
        }
        
        if ( $count != 0 ){
            $average = $total / $count;
        }
    }
    
    return $average;

});
#1824121

Hola Nigel, lo entindo que este codigo esta fuera del soporte tecnico, solo un comentario.
El nombre que has puesto "primer-eso-valoracio" te refieres al nombre de la relación entre el parent y el children.
Y este otro es "wpcf-valoracion-unitats" te refieres al campo donde estan las cinco opciones para valorar.
Muchas gracias por el codigo y daré por cerrado el tiket.
Saludos.
Rafa corts

#1825863

Minesh
Supporter

Languages: Inglés (English )

Timezone: Asia/Kolkata (GMT+05:30)

Nigel is on Vacation. This is Minesh jumping in here.

El nombre que has puesto "primer-eso-valoracio" te refieres al nombre de la relación entre el parent y el children.
==>
Yes - "primer-eso-valoracio" refers to the post-relationship slug.

Y este otro es "wpcf-valoracion-unitats" te refieres al campo donde estan las cinco opciones para valorar.
Muchas gracias por el codigo y daré por cerrado el tiket.
=>
wpcf-valoracion-unitats is a custom field that holds the rating value.