Soporte » Plugins y Hacks » Intentando ampliar una accion

  • Resuelto shuar

    (@shuar)


    Hola de nuevo!!!!

    No se si debo ahcer la pregunta en un nuevo post, seguir el que cerramos en su momento… No se, si considerais que es una continuación pues siempre podemos hacer un corta pega del contenido en el antiguo post.

    Hace unos dias pregunte una duda aqui en el foro y un compañero me la resolvió, de manera rapida y eficaz. La cosa es que queria poner un texto bajo el precio de la pagina de producto de woocommerce y que este cambiara cuando un usuario se conectase. Al final este chico que se llama Adrián soluciono el asunto de la siguiente manera:

    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if(!is_user_logged_in()){ ?>
       <span style="font-size:11.5px;color:#B22222;"><?php _e("REGISTRATE COMO PROFESIONAL Y ​COMPRA A PRECIOS PROFESIONALES.","themedomain"); ?></span>
       <span style="color: rgb(0, 0, 0);"><?php _e("Iniciar Sesión","themedomain"); ?></span>
    <?php }else{ ?>
      <span><?php _e(‘Estás comprando como profesional’,’themedomain’); ?></span>
    <?php } ?>

    Me pregunto si es posible ademas, añadir algún tipo de código para que estos dos textos, el que aparece cuando no estas conectado y el de cuando estas conectado, sean diferentes en una pagina de producto concreta y sólo en esa.

    ¿esto seria posible?

    Gracias!!!!

Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Hola @shuar,

    Con este código debiera funcionarte:

    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if( ! is_user_logged_in() ) : ?>
       <span style="font-size:11.5px;color:#B22222;"><?php _e("REGISTRATE COMO PROFESIONAL Y ​COMPRA A PRECIOS PROFESIONALES.","themedomain"); ?></span>
       <span style="color: rgb(0, 0, 0);"><?php _e('Iniciar Sesión','themedomain'); ?></span>   
    <?php elseif ( is_single(2500) // El ID específico del producto ) : ?>
      <span><?php _e('Estás comprando como un cliente','themedomain'); ?></span>
    <?php else: ?>
      <span><?php _e('Estás comprando como profesional','themedomain'); ?></span>
    <?php endif; ?>

    La primera evaluación que hace es si el usuario está conectado, sino, entonces evalúa si está en un producto específico y muestra un mensaje exclusivo para ese producto (Estás comprando como un cliente), en caso de que no esté allí, muestra un mensaje general para el resto de productos (Estás comprando como profesional).

    Tienes que cambiar el ID por el valor correspondiente a tu producto. El ID del producto lo consigues en tu Escritorio > Productos, pasas el cursor sobre el título del producto que quieres personalizar y verás el ID, tal como se muestra en la siguiente imagen:

    Ver ID producto WooCommerce

    ¡Espero que te sirva de ayuda! 😉

    • Esta respuesta fue modificada hace 3 semanas, 4 días por Yordan Soares.

    Hola Yordan!

    Gracias por tu respuesta. A ver te cuento.

    En principio el código que pones no me funciona, pero repasando mi pagina price.php el código que contiene para hacer la primera acción no es el mismo que el que he puesto en un principio (disculpa el error) el digo con el que trabajo y me da maravillosos resultados es:

    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if(!is_user_logged_in()){
       echo '<span>'.__('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>','tudomaindetema').'</span>';
    }else{
       echo '<span>'.__('<span style="color:#B22222;">¡Estás comprando a precio profesional!','tudomaindetema').'</span>';
    } ?>

    He intentado modificarlo con las lineas que me das, pero nada me da error. Lo que he puesto es lo siguiente:

    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if(!is_user_logged_in()){
       echo '<span>'.__('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>','tudomaindetema').'</span>';
    }else{
       echo '<span>'.__('<span style="color:#B22222;">¡Estás comprando a precio profesional!','tudomaindetema').'</span>';
    } ?>
    <?php elseif ( is_single(2500) // El ID específico del producto ) : ?>
      <span><?php _e('Estás comprando como un cliente','themedomain'); ?></span>
    <?php else: ?>
      <span><?php _e('Estás comprando como profesional','themedomain'); ?></span>
    <?php endif; ?>

    jejejeje seguramente una burrada, pero como te habrás dado cuenta la informática no es lo mío, por mucho que me empeñe jejeje.

    Bueno, alguna idea de como hacerlo correctamente???

    Gracias y un saludo.

    Hola de nuevo @shuar,

    Prueba con este código:

    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if (!is_user_logged_in()) {
      // Este código se ejecuta cuando los usuarios no están conectados
      echo '<span>' . __('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>', 'tudomaindetema') . '</span>';
    } elseif (is_single(2500)) {
      // Este código se ejecuta en un producto específico
      // Es necesario establecer el ID del producto
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando como un cliente!', 'tudomaindetema') . '</span>';
      // Este código se ejecuta en el resto de productos
    } else {
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando a precio profesional!', 'tudomaindetema') . '</span>';
    }
    ?>

    Funciona a la perfección Yordan!!!!!

    Dos detalles para dejarlo perfecto.

    1. Como hacer para que en el producto especifico también tenga un texto concreto estando desconectado (Rol de invitado)
    2. ¿Como haría para integrar lo dicho en varios ID de producto?

    Hola @shuar,

    Respondiendo la primera pregunta, puedes mezclar ambas evaluaciones, que no esté conectado y que sea un producto con ID concreto:

    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if ( ! is_user_logged_in()) {
      // Este código se ejecuta cuando los usuarios no están conectados
      echo '<span>' . __('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>', 'tudomaindetema') . '</span>';
    } elseif ( ! is_user_logged_in() && is_single(2500)) {
      // Este código se ejecuta los usuarios no están conectados
      // y en un producto específico
      // Es necesario establecer el ID del producto
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando como un cliente!', 'tudomaindetema') . '</span>';
      // Este código se ejecuta en el resto de productos
    } elseif (is_single(2500)) {
      // Este código se ejecuta en un producto específico
      // Es necesario establecer el ID del producto
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando como un cliente!', 'tudomaindetema') . '</span>';
      // Este código se ejecuta en el resto de productos
    } else {
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando a precio profesional!', 'tudomaindetema') . '</span>';
    }
    ?>

    En el segundo caso, lo que tienes que hacer es pasarle varios IDs a la función is_single(), para ello tienes que recurrir a un arrego (array). Aunque puedes establecerlo directamente en la función, lo mejor es guardarlo en una variable y luego pasarle esa variable como parámetro a la función:

    // Arreglo de productos específicos
    // para mostrar mensajes personalizados
    $productos = array(
      12, // Camiseta  
      18, // Pantalón
      22, // Chaqueta
      75, // Jersey
    );
    
    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if ( ! is_user_logged_in() ) {
      // Este código se ejecuta cuando los usuarios no están conectados
      echo '<span>' . __('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>', 'tudomaindetema') . '</span>';
    } elseif ( ! is_user_logged_in() && is_single( $productos ) ) {
      // Este código se ejecuta los usuarios no están conectados
      // y en un producto específico  
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando como un cliente!', 'tudomaindetema') . '</span>';
      // Este código se ejecuta en el resto de productos
    } elseif ( is_single( $productos ) ) {
      // Este código se ejecuta en un producto específico  
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando como un cliente!', 'tudomaindetema') . '</span>';
      // Este código se ejecuta en el resto de productos
    } else {
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando a precio profesional!', 'tudomaindetema') . '</span>';
    }
    ?>

    Espero que te sirva 😉

    • Esta respuesta fue modificada hace 3 semanas, 3 días por Yordan Soares.

    Hola Yordan!

    Lo primero, volver a darte las gracias por tu ayuda y por tu compromiso con este magnifico foro y con los que tenemos unos escasos o nulos conocimientos sobre el tema

    Bueno te cuento que el código que me pasas no funciona correctamente. No entiendo por que. Al final haciendo pruebas lo he hecho funcionar de la siguiente manera:

    // ID de producto donde mostrar mensaje especifico
    $productos = array(
      19930, // Magic Lash  
      00, // Pantalón
      00, // Chaqueta
      00, // Jersey
    );
    
    ?>
    <p class="price"><?php echo $product->get_price_html(); ?></p>
    <?php if (!is_user_logged_in()) {
    	
      // Este código se ejecuta cuando los usuarios no están conectados
      echo '<span>' . __('<span style="color:#B22222;"><style="white-space: pre;">Registrate como profesional y compra a precios profesionales.<style="color: rgb(0, 0, 0); white-space: pre;"> <a href="https://nailsup.es/my-account">Iniciar Sesi&oacute;n</a>', 'tudomaindetema') . '</span>';
    } elseif ( ! is_user_logged_in() && is_single( $productos ) ) {
    } elseif ( is_single( $productos ) ) {
    	
      // Este código se ejecuta en un producto específico cuando estas conectado
      echo '<span>' . __('<span style="color:#B22222;">Este producto es de precio único tanto profesional como PVP', 'tudomaindetema') . '</span>';
        
      // Este código se ejecuta en el resto de productos
    } else {
      echo '<span>' . __('<span style="color:#B22222;">¡Estás comprando a precio profesional!', 'tudomaindetema') . '</span>';
    }
    ?>

    La parte de hacer que un mensaje especifico se lea en ID de producto específicos funciona, pero solo cuando estas conectado. Desconectado, solo se ve el mensaje general para todos.

    Lo cierto que así me podría servir, pero si se te ocurre algo soy todo oídos.

    Un saludo.

Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Debes estar registrado para responder a este debate.