Soporte » Plugins y Hacks » Insertar onclick en los enlaces de las listas de artículos mediante plugin

  • Hola!

    Estaba desarrollando una cosilla de analítica web y lo quiero pasar a plugin para compartir, pero estoy algo atascado.

    No sé si alguien me puede ayudar.

    Lo que necesito es insertar el atributo onclick en los enlaces de las listas de artículos que suelen mostrar en el bucle de los posts:
    while ( have_posts() ) : the_post();

    Cuando se ejecuta el bucle, la parte del código donde necesito insertar el evento onclick es aquí:
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" >

    He intentado modificar desde el plugin que estoy creando, directamente la parte de th_permalink() jugando un poco con las comillas dobles pero no tira (aunque sé que no es la forma correcta, os dejo el ejemplo:

    add_filter("the_permalink", "qso_Add_Onclic");
    function qso_Add_Onclic($old_Permalink)
    {
    
     return $old_Permalink."&quot; onclick=&quot;productObject(".the_title().",".
    		the_ID().",".
    		get_the_author_meta('ID').",".
    		get_the_category()[0]->cat_name.",". 
    		//$qso_etiquetas."','".
    						wp_title() .",".
    						$old_Permalink.")";
    }

    Como resultado me da esta url pero se muestra todo comentado a pesar de las comillas dobles:
    href="Primera imagen del PVP de Pokemon Go3184Street Of Games - Artículos de videojuegos, comics y animehttps://www.streetofgames.com/noticias/primera-imagen-del-pvp-de-pokemon-go/" onclick="productObject(,,2,Noticias,,https://www.streetofgames.com/noticias/primera-imagen-del-pvp-de-pokemon-go/)"

    He intentado poner las comillas dobles escapadas y con ASCII sin éxito.

    Esto a nivel de código directamente sobre el template, ya he conseguido hacer que funcione pero estoy trabajando para migrarlo a un plugin y estoy bloqueado en colocar el onclick.

    Para los usuarios logueados, podéis ver en el enlaces el resultado final.

    Gracias!

    • Este debate fue modificado hace 3 semanas, 1 día por Queseo.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 8 respuestas - 1 de 8 (de 8 total)
  • kallookoo

    (@kallookoo)

    Hola @queseo

    Veo que estas confundido, el filtro the_permalink es para modificar la url solamente que se usa en el href, si quieres añadir un evento debes añadirlo usando diferentes metodos que deberas ver cual es el mejor.

    Te dejo este link donde veras como funciona la function the_title y deberias ver una opcion.

    https://developer.wordpress.org/reference/functions/the_title/

    • Esta respuesta fue modificada hace 3 semanas por kallookoo.

    Hola @kallookoo !

    Gracias por tu respuesta =)

    Aun así no entiendo muy bien cómo llegar a modificar esto.

    Entiendo que lo que quieres decir es que modifique la función de the_permalink por the_title que sería algo así:

    add_filter("the_title", "qso_Add_Onclic");
    function qso_Add_Onclic(before,after)

    Si no me equivoco, ¿lo que me quieres decir es que modifique la función insertando el valor en el after?

    ¿Para ello si no me equivoco, tendría que ser algo así?

    add_filter("the_title", "qso_Add_Onclic");
    function qso_Add_Onclic(before,nueva_funcion()){
        $title = get_the_title();
     
        if ( strlen( $title ) == 0 ) {
            return;
        }
     
        $title = $before . $title . $after;
     
        if ( $echo ) {
            echo $title;
        } else {
            return $title;
        }
    }
    nueva_funcion()
    {
    return "&quot; onclick=&quot;productObject(".the_title().",".
    		the_ID().",".
    		get_the_author_meta('ID').",".
    		get_the_category()[0]->cat_name.",". 
    		//$qso_etiquetas."','".
    						wp_title() .",".
    						$old_Permalink.")";
    }
    

    Lo he resumido todo el código en esto para ver si consiguo hacerlo rular pero nada:

    add_filter("the_title", "qso_Add_Onclic");
    function qso_Add_Onclic()
    {
    	$title = get_the_title();
    	$title = $title . "\" onclick=\"productObject("
    			.$title.",".
    			the_ID().",".
    			get_the_author_meta('ID').",".
    			//get_the_category()[0]->cat_name.",". 
    			//$qso_etiquetas."','".
    			wp_title() .",".
    			the_permalink().")";
    	
    return $title;
    }
    

    Sigo probando con diferentes variaciones, ahora he intentado acceder al DOM con php para tratar de insertar el onclick en los enlaces, pero sigo sin lograrlo.

    
    add_filter("wp_head", "qso_Add_Onclic");
    
    // Formateando contenido para SSL
    function qso_Add_Onclic($content = '') {
      $document = new DOMDocument();
      $document->loadHTML($content);
      
      $tags = $document->getElementsByTagName('a');
      foreach ($tags as $tag) {
        $tag->setAttribute('onclick', "productObject("
    			.the_title().",".
    			the_ID().",".
    			get_the_author_meta('ID').",".
    			//get_the_category()[0]->cat_name.",". 
    			//$qso_etiquetas."','".
    			wp_title() .",".
    			the_permalink().")"
     
        );
      }
      return $document->saveHTML();
    }

    Mmmm creo que lo que debería hacer sería reemplazar la llamada donde se cargan los contenidos en bucle get_template_part( 'content', get_post_format() ); y cargar dentro el script para que agregue el atributo onclick, aunque no logró hacerlo.

    Adjunto esto último aunque tampoco me funciona correctamente:

    
    add_filter("get_template_part", "qso_Add_Onclic");
    
    // Formateando contenido para SSL
    function qso_Add_Onclic($content = '') {
      
      $document = new DOMDocument();
      $document->loadHTML($content);
      
      $tags = $document->getElementsByTagName('a');
      foreach ($tags as $tag) {
        $tag->setAttribute('onclick', "productObject("
    			.the_title().",".
    			the_ID().",".
    			get_the_author_meta('ID').",".
    			//get_the_category()[0]->cat_name.",". 
    			//$qso_etiquetas."','".
    			wp_title() .",".
    			the_permalink().")"
     
        );
      }
      return $document->saveHTML();
    }
    

    Si alguien puede ayudarme de alguna forma a meter un onclick a los enlaces de WordPress mediante el fichero functions se agradecerá =)

    kallookoo

    (@kallookoo)

    Veamos, considerando que eres programador deberias fijarte en el codigo o codigos del WordPress para entender como funciona y poder manipularlo.
    Como quieres meterlo en un plugin con lo que no tocarias los archivos del theme, tienes dos alternativas, hacerlo del lado del servidor con filtros o del lado del cliente usando javascript.

    Personalmente no pongo codigos porque considero que si eres programador lo mejor es entenderlo y hacerlo uno mismo, que es cuando realmente aprendes. Si no lo fueses (doy por hecho que si) entonces suelo recomendar algun plugin pero para este caso en concreto no conozco ninguno.

    Hola @kallookoo

    El plugin lo estoy desarrollando yo para la comunidad y es lo última parte que me falta.

    Lo tenía implementado en el tema y quise pasarlo a plugin, es por ello que debo insertar el onclick desde fuctions.php con las variables que inserto y por esa misma razón no estoy buscando otro plugin.

    Entiendo lo que dices respecto a que es mejor que me pelee yo con el código y me parece bien tu postura, pero agradecería si pudieras explicar un poco más lo que tratas de decir ya que la documentación me la he machacado.

    Quizá hay algo que no esté viendo yo o que tu consideres que es lo que necesito y realmente no sea así por que ya lo he comprobado antes.

    Voy a volver al punto de tu primera respuesta. Aquí no estoy entendiendo bien lo que me quieres decir. ¿Me sugieres que modifique el filtro de the_title() para incluir en este el código?

    Vamos que si el código origianl es así:

    function the_title( $before = '', $after = '', $echo = true ) {
        $title = get_the_title();
     
        if ( strlen( $title ) == 0 ) {
            return;
        }
     
        $title = $before . $title . $after;
     
        if ( $echo ) {
            echo $title;
        } else {
            return $title;
        }
    }

    Dentro de la función ¿inserte el código del onclick y lo una desde el string tal que así más o menos $title = $before . $title . $after . $variable_Con_El_Onclick; ?

    Lo digo porque esto no distaría mucho de lo que estaba haciendo en el primer paso, de otra forma pero no distaría mucho.

    Hola @queseo
    Lamentablemente ahora mismo tengo mi mac en la tienda por una averia y no puedo hacer pruebas, igualmente si seria posible podria ver la totalidad del codigo ya sea en github, etc… Para comprender exactamente que haria el plugin y como lo tienes, asi podria decirte mas adelante que es lo que esta pasado, ya que ahora mismo todo lo hago de cabeza y puede que me este equivocado.

    Hola @kallookoo !

    Disculpa la demora =)

    Por ahora he lanzado una versión beta por si le quieres pegar un ojo
    https://github.com/queseo/ga-ec-posts-wordpress

    El objetivo es hacer seguimiento de clics e impresiones mediante el comercio avanzado de Google Analytics pero en los posts de WordPress.

    Intenté pasar el evento por script pero solo conseguía pasar los datos del último elemento.

    La otra posibilidad que tengo y estoy planteándome es lanzar el evento del clic cuando el usuario llegue a la página aunque no sería la implementación correcta.

    Como por ahora no lo he conseguido, lo he puesto para que los usuarios lo inserten de forma manual. No es la opción más optima pero por algo hay que empezar.

    Tengo también otras cosas que tengo que trabajar como enviar las posiciones de los artículos y tal, pero bueno, poco a poco.

    Creo que poder extraer los elementos más clicados de una lista y poder contrastarlos con las impresiones y conocer el porcentaje de clics es un dato bastante interesante de por sí para webs de noticias y blogs que no tengan funciones de venta.

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