Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

[SOLUCIONADO] Shortcode output

Estas en el tema de Shortcode output en el foro de WordPress en Foros del Web. Buenas a todos, hoy escribo con un nuevo problema que me esta fastidiando bastante y que puede que le sea de utilidad a más gente. ...
  #1 (permalink)  
Antiguo 05/07/2013, 12:28
 
Fecha de Ingreso: octubre-2011
Ubicación: bilbao
Mensajes: 218
Antigüedad: 8 años
Puntos: 28
Shortcode output

Buenas a todos, hoy escribo con un nuevo problema que me esta fastidiando bastante y que puede que le sea de utilidad a más gente.

Tengo una funcion con una query que devuelve los post recientes.

Código PHP:
Ver original
  1. function recent_posts ($num, $exclude_posts, $exclude_categories) {
  2.    
  3. $args = array(
  4.     'orderby' => 'post_date',
  5.     'order' => 'desc',
  6.     'posts_per_page' => $num,
  7.     'caller_get_posts' => 1,
  8.     'post__not_in' => $exclude_posts,
  9.     'category__not_in' => $exclude_categories,
  10.     );
  11.    
  12. $the_query = new WP_Query($args); while ($the_query->have_posts()) : $the_query->the_post(); ?>
  13.  
  14. <div class="recentPost">
  15. <div class="thumbnail"><?php if (has_post_thumbnail()) { the_post_thumbnail('home3'); } ?></div>
  16. <div class="excerpt">
  17. <span class="WidgetTitulo"><a href="'<?php the_permalink(); ?>" title="<?php the_title(); ?>"> <?php the_title(); ?></a></span>
  18. <span class="date"><?php get_the_date() ?> | <?php the_author(); ?>
  19. </span>
  20. </div>
  21. </div>
  22. <!-- end recent posts-->
  23.  
  24. <?php
  25.  
  26. endwhile;  wp_reset_query();
  27.    
  28. }

Esta función funciona perfectamente pero cuando la intento usar en un shortcode, este aparece siempre antes del contenido del post, en lugar de en la linea en la que esta escrito.

Investigando un poco, resulta que los shortcodes esto ocurre porque los shortcodes tienen que retornar un string, nada de echo ni print.

El problema es que no se como conseguir esto. He probado con esto:

Código PHP:
Ver original
  1. function recent_posts ($num, $exclude_posts, $exclude_categories) {
  2.    
  3. $args = array(
  4.     'orderby' => 'post_date',
  5.     'order' => 'desc',
  6.     'posts_per_page' => $num,
  7.     'caller_get_posts' => 1,
  8.     'post__not_in' => $exclude_posts,
  9.     'category__not_in' => $exclude_categories,
  10.     );
  11.    
  12. $the_query = new WP_Query($args); while ($the_query->have_posts()) : $the_query->the_post();
  13.  
  14. $output = '<div class="recentPost">
  15. <div class="thumbnail">'. the_post_thumbnail("home3").'</div>
  16. <div class="excerpt">
  17. <span class="WidgetTitulo"><a href="'. the_permalink() .'" title="'. the_title().'">'. the_title().'</a></span>
  18. <span class="date">'.get_the_date().' | '.the_author().'
  19. </span>
  20. </div>
  21. </div>
  22. <!-- end recent posts-->';
  23.  
  24. return $output;
  25.  
  26. endwhile;  wp_reset_query();
  27.    
  28. }

Pero me devuelve:

<img src="http://www.codetocode-developments.com/fabulous/files/demo_img9-50x50.jpg" class="attachment-home3 wp-post-image" alt="demo_img9" />http://www.codetocode-developments.c...ipsum-10/Lorem ipsum asideLorem ipsum asideadmin


Cuando deberia devolverme el titulo e imagen destacada de 5 posts envueltos cada uno en un div.

Alguien que le haya pasado que pueda echarme una mano?
  #2 (permalink)  
Antiguo 05/07/2013, 16:55
 
Fecha de Ingreso: octubre-2011
Ubicación: bilbao
Mensajes: 218
Antigüedad: 8 años
Puntos: 28
Respuesta: Shortcode output

Bueno, despues de darle muchas vueltas lo mejor que he conseguido es esto:

Código PHP:
Ver original
  1. function recent_posts ($num, $exclude_posts, $exclude_categories) {
  2. $args = array(
  3.     'orderby' => 'post_date',
  4.     'order' => 'desc',
  5.     'posts_per_page' => $num,
  6.     'caller_get_posts' => 1,
  7.     'post__not_in' => $exclude_posts,
  8.     'category__not_in' => $exclude_categories,
  9.     );
  10. $the_query = new WP_Query($args);
  11. $output = '';
  12. while ($the_query->have_posts()): $the_query->the_post();
  13. $output .= '<div class="recentPost"><div class="excerpt"><span class="WidgetTitulo"><a href="'.the_permalink().'" title="'.the_title().'">'.the_title().'</a></span><span class="date">'.get_the_date().'|'.the_author().'</span></div></div><!-- endrecentposts-->';
  14. endwhile;
  15. wp_reset_query();
  16. return $output;
  17. }

Pero me ocurre algo extraño, primero me aparece antes del contenido la url, el titulo.. osea se imprimem las funciones the_permalink(), the_title() y despues en la linea en la que debe aperecer me aperece todo el html sin estas variables impresas:

http://www.codetocode-developments.c...ipsum-10/Lorem ipsum asideLorem ipsum asideadminhttp://www.codetocode-developments.com/fabulous/2013/06/19/lorem-ipsum-9/Lorem ipsum galleryLorem ipsum galleryadminhttp://www.codetocode-developments.com/fabulous/2013/06/19/lorem-ipsum-8/Lorem ipsumLorem ipsumadmin


Código HTML:
Ver original
  1. <br />
  2. <div class="recentPost"><div class="excerpt"><span class="WidgetTitulo"><a href="" title=""></a></span><span class="date">19 junio, 2013|admin</span></div></div><!-- endrecentposts--><div class="recentPost"><div class="excerpt"><span class="WidgetTitulo"><a href="" title=""></a></span><span class="date">19 junio, 2013|admin</span></div></div><!-- endrecentposts--><div class="recentPost"><div class="excerpt"><span class="WidgetTitulo"><a href="" title=""></a></span><span class="date">19 junio, 2013|admin</span></div></div><!-- endrecentposts--><br />
  #3 (permalink)  
Antiguo 07/07/2013, 12:20
 
Fecha de Ingreso: octubre-2011
Ubicación: bilbao
Mensajes: 218
Antigüedad: 8 años
Puntos: 28
Respuesta: Shortcode output

Acabo de darme cuenta de que el tema estaba marcado como solucionado, no se porque.

Pero finalmente, he encontrado una solucion, usar get_permalink en vez de the_permalink, y lo mismo con las demas funciones. Aqui pongo el codigo correcto:

Código PHP:
Ver original
  1. function recent_posts ($num, $exclude_posts, $exclude_categories) {
  2. $args = array(
  3.     'orderby' => 'post_date',
  4.     'order' => 'desc',
  5.     'posts_per_page' => $num,
  6.     'caller_get_posts' => 1,
  7.     'post__not_in' => $exclude_posts,
  8.     'category__not_in' => $exclude_categories,
  9.     );
  10. $the_query = new WP_Query($args);
  11. $output = '';
  12. while ($the_query->have_posts()): $the_query->the_post();
  13. $output .= '<div class="recentPost"><div class="excerpt"><span class="WidgetTitulo"><a href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></span><span class="date">'.get_the_date().'|'.get_the_author().'</span></div></div><!-- endrecentposts-->';
  14. endwhile;
  15. wp_reset_query();
  16. return $output;
  17. }

Y el shortcode:

Código PHP:
Ver original
  1. ------------------------------------------------------*/
  2. function recent_posts($atts) {
  3. extract( shortcode_atts( array(
  4.       'num' => '4',
  5.       'exclude_posts' =>'',
  6.       'exclude_cat' =>'',
  7.       ), $atts ) );
  8.  
  9.  
  10.     $output = recent_posts ($num, $exclude_posts, $exclude_cat);
  11.     return $output;
  12.  
  13. }
  14. add_shortcode('recent-posts', 'recent_posts');

Etiquetas: output, php, post, shortcode
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.