2012-05-02 9 views
8

Sono consapevole che probabilmente si tratta di un problema di restituzione. Quindi ho diviso il contenuto, uno in una funzione denominata thelist e l'altra è una funzione effettiva che lo restituisce. Il codice segue la domanda.Shortcode che viene visualizzato nella parte superiore del contenuto anziché nel punto in cui è necessario.

Lo shortcode attuale funziona, tranne che il contenuto appare in alto prima del resto del contenuto. Pensavo che il ritorno now_include_post avrebbe risolto il problema, ma non è così. Qualcuno può aiutare?

function thelist() { 
if (have_posts()) : while (have_posts()) : the_post(); 
?> 
     <div id="post-<?php the_ID(); ?>" <?php post_class('thumb'); ?>> 
      <a href="<?php the_permalink() ?>" class="thumb-link"> 
      <?php 
    if (!post_password_required()) { 
        if (has_post_thumbnail()) { 
         the_post_thumbnail(); 
        } 
       } else { 
        ?> 
        <img src="<?php bloginfo('template_url') ?>/img/locked.png" /> 
     <?php } ?> 
      </a> 
      <h2> 
       <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a> 
      </h2> 
     </div> 
<?php /* end post */ ?> 
<?php 
    endwhile; 
    endif; 
    wp_reset_query(); 
    } 
    ?> 
    <?php 

function now_include_post($atts) { 
$thepostid = intval($atts[id]); 
query_posts("p=$thepostid"); 
$output .= thelist(); 
return $output; 
} 

risposta

24

si desidera restituire tutto il testo, piuttosto che l'output di allora e lì quando si sta fuggendo PHP.

All'inizio del thelist() funzione avvia un buffer di uscita con

ob_start(); 

Poi alla fine chiudere questa buffer e restituire il contenuto con

return ob_get_clean(); 

che restituirà il contenuto piuttosto di echo subito, che è quello che vuoi fare nel caso di un shortcode WP

PHP information on Output Buffering Functions

+1

Questo è davvero eccezionale. Grazie mille per il tuo aiuto e quel link! – user1368968

+0

È il 2014 e dopo 2 anni la tua risposta mi ha salvato :) Grazie! –

+0

Funziona per me. Grazie –

-1

Ho questo shortcode e appare sempre nella parte superiore della pagina anche se inserisco lo shortcode alla fine del contenuto della pagina (in wordpress), qualsiasi suggerimento per favore.

function ss_framework_services_sc($atts, $content = null) { 

extract(shortcode_atts(array('id' => ''), $atts)); 

global $post; 

    $args = array( 'name' => esc_attr($id), 
        'post_type' => 'services', 
        'posts_per_page' => '1' 

       ); 

    query_posts($args); 


if(have_posts()) while (have_posts()) : the_post(); ?> 

<div class="services-tabs"> 
    <div class="board"> 


      <div class="idTabs"> 
       <div class="tabs-images"> 

         <ul> 

            <?php $postslist = get_posts('post_type=services&numberposts=6&order=DESC'); foreach ($postslist as $post) : setup_postdata($post); ?> 

               <li> 
                <a href="#<?php the_ID();?>"> 


                   <img src="<?php bloginfo('template_directory'); ?>/js/cache/timthumb.php?src=<?php $imgsrc = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), "Full"); echo $imgsrc[0]; ?>&w=120&h=120"alt="<?php the_title(); ?>" class="footer-thumb" /> 

                   <div class="circle"> 
                    <p class="service-title"><?php the_title() ?></p> 
                   </div> 


                </a> 
               </li> 

            <?php endforeach; ?> 


         </ul> 
       </div> 
      </div> 


      <div class="inner" > 

        <?php $postslist = get_posts('post_type=services&numberposts=6&order=DESC'); foreach ($postslist as $post) : setup_postdata($post); ?> 

        <div class="result" id="<?php the_ID();?>"> 

         <?php the_content(); ?> 

        </div> 
        <?php endforeach; ?> 
      </div><!--inner--> 



</div><!--board--> 
</div> 
<?php 

endwhile; 

wp_reset_query(); 


return $output; 

} 

add_shortcode('services', 'ss_framework_services_sc'); 
Problemi correlati