Php 不使用echo在页面顶部返回的快捷码

Php 不使用echo在页面顶部返回的快捷码,php,wordpress,shortcode,Php,Wordpress,Shortcode,我有一个wordpress模板附带的短代码,但它总是在页面顶部返回数据,即使我在短代码上方键入了一些内容。从网上的其他问题中,我了解到这种行为的发生是因为使用了echo语句。因此,我尝试重写函数并将所有内容放入$sea\u tours\u内容中,然后返回该变量 <div>text before</div> [home_sea_tours_inner showposts="1" category="winter-activities"

我有一个wordpress模板附带的短代码,但它总是在页面顶部返回数据,即使我在短代码上方键入了一些内容。从网上的其他问题中,我了解到这种行为的发生是因为使用了
echo
语句。因此,我尝试重写函数并将所有内容放入$sea\u tours\u内容中,然后返回该变量

<div>text before</div>
[home_sea_tours_inner showposts="1" category="winter-activities"]
<div>text after</div>
之前的文本
[home\u sea\u tours\u inner showposts=“1”category=“冬季活动”]
后文
我在下面创建了代码,但当我使用它时,它仍然将短代码置于文本其余部分之上。我错过了什么

// Inner Page Sea Tours Shortcode
function travia_home_sea_tours_func_inner( $atts ){
    extract( shortcode_atts( array(
        'category'    =>    '',
        'showposts'   =>    '',
    ),$atts));    
    
    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
    elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
    else { $paged = 1; }
    
    $tours_query = new WP_Query( array(            
        'post_type' => 'tours',
        'posts_per_page' => $showposts,
        'paged' => $paged,
        'order' => 'asc',
        'tax_query' => array( array( 'taxonomy' => 'tours_category', 'terms' => $category, 'field' => 'slug' ))
    ) );
    $n = 0;
    
    
    if( $tours_query->have_posts() ) :
        
        while( $tours_query->have_posts() ) : $tours_query->the_post(); 
        $n++; if( $n%3 == 0 ) $nomargn = ' lastcols'; else $nomargn = '';
        $rating = esc_html( get_post_meta( get_the_ID(), '_tour_rating', true ) );
        $tourprice = get_post_meta( get_the_ID(), 'tourprice', true );
        $days = get_post_meta( get_the_ID(), 'days', true );
        
        if( $rating == 0 ) $rating1 ='<i class="fa fa-star"></i>'; else $rating1 = '';
            if( $rating == 1 ) $rating2 ='<i class="fa fa-star"></i><i class="fa fa-star"></i>'; else $rating2 = '';
            if( $rating == 2 ) $rating3 ='<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; else $rating3 = '';
            if( $rating == 3 ) $rating4 ='<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; else $rating4 = '';
            if( $rating == 4 ) $rating5 ='<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; else $rating5 = '';
        
        if( empty($days) ) $days_info =''; else $days_info ='<i class="fa fa-clock-o" aria-hidden="true"></i>'.$days;
        ?>
        
        <?php
        $sea_tours_content = '';
        $sea_tours_content .= '<div class="tours-list '.$nomargn.'">';
        $sea_tours_content .=       '<div class="tours-thumnailbx">';
        $sea_tours_content .=           the_post_thumbnail();
        $sea_tours_content .=             '<figcaption>';
        $sea_tours_content .=                '<!--<span class="buttonleft"><a class="trigger_popup_fricc">Inquiry</a></span>-->';
        $sea_tours_content .=                 '<span class="buttonright"><a href="'.the_permalink().'" target="_blank">View More</a></span>';
        $sea_tours_content .=                 '<div class="clear"></div>';
                        
        $sea_tours_content .=             '</figcaption>';                                      
        $sea_tours_content .=       '</div>';
        $sea_tours_content .=       '<div class="toursdesbox">';
        $sea_tours_content .=             '<span class="spandate"> '.$days_info.'</span>';
        $sea_tours_content .=             '<span class="spanprice">'.$tourprice.'</span>';
        $sea_tours_content .=             '<div class="clear"></div>';
        $sea_tours_content .=             '<h4><a href="'.the_permalink().'">'.the_title().'</a></h4>';
        $sea_tours_content .=             '<span class="spanrating">';
        $sea_tours_content .=             '</span>';            
        $sea_tours_content .=             content( of_get_option('toursexcerptlength') );
        $sea_tours_content .=       '</div>';
        $sea_tours_content .=   '</div>';
            
        endwhile;                               
        $sea_tours_content .= '<div class="clear"></div>';
        $sea_tours_content .= '<div class="hover_bkgr_fricc">';
        $sea_tours_content .=     '<span class="helper"></span>';
        $sea_tours_content .=     '<div>';
        $sea_tours_content .=         '<div class="popupCloseButton">X</div>';
        $sea_tours_content .=         '<h3>Inquiry Now</h3>';
                
                if( of_get_option('popupform') != '') { $sea_tours_content .= do_shortcode(of_get_option('popupform')); } ;
        $sea_tours_content .=    '</div>';
        $sea_tours_content .= '</div>';

        wp_reset_postdata();        
        else : ;            
        endif; 
    
    return $sea_tours_content;
    
}
add_shortcode( 'home_sea_tours_inner', 'travia_home_sea_tours_func' );
//内页Sea Tours短代码
功能travia_home_sea_tours_func_inner($atts){
提取(短码)附件(数组)(
'类别'=>'',
“展示帖子”=>“”,
)美元(附件);;
if(get_query_var('paged')){$paged=get_query_var('paged');}
elseif(get_query_var('page')){$paged=get_query_var('page');}
else{$paged=1;}
$tours\u query=新的WP\u查询(数组(
“post_type”=>“tours”,
“每页帖子”=>$showposts,
“paged”=>$paged,
“订单”=>“asc”,
'tax_query'=>数组(数组('taxonomy'=>'tours_category','terms'=>$category',field'=>'slug'))
) );
$n=0;
如果($tours\u query->have\u posts()):
而($tours\u query->have\u posts()):$tours\u query->the\u post();
$n++;如果($n%3==0)$nomargn='lastcols';否则$nomargn='';
$rating=esc_html(get_post_meta(get_ID(),'u tour_rating',true));
$tourprice=get_post_meta(get_ID(),'tourprice',true);
$days=get_post_meta(get_ID(),'days',true);
如果($rating==0)$rating1='';否则$rating1='';
如果($rating==1)$rating2='';否则$rating2='';
如果($rating==2)$rating3='';否则$rating3='';
如果($rating==3)$rating4='';否则$rating4='';
如果($rating==4)$rating5='';否则$rating5='';
如果(空($days))$days\u info='';否则$days\u info=''。$days;
?>
尝试
ob\u start()
ob\u get\u clean()
检查以下代码

// Inner Page Sea Tours Shortcode
function travia_home_sea_tours_func_inner( $atts ){

    extract( shortcode_atts( array(
        'category'  => '',
        'showposts' => '',
    ), $atts ) );
    
    if ( get_query_var('paged') ) { 
        $paged = get_query_var('paged'); 
    }elseif ( get_query_var('page') ) { 
        $paged = get_query_var('page'); 
    }else { 
        $paged = 1; 
    }
    
    $tours_query = new WP_Query( array(            
        'post_type'      => 'tours',
        'posts_per_page' => $showposts,
        'paged'          => $paged,
        'order'          => 'asc',
        'tax_query' => array( 
            array( 
                'taxonomy' => 'tours_category', 
                'terms'    => $category, 
                'field'    => 'slug' 
            )
        )
    ) );

    $n = 0;
    
    ob_start();

    if( $tours_query->have_posts() ) {
        
        while( $tours_query->have_posts() ) { $tours_query->the_post(); 

            $n++; 

            if( $n%3 == 0 ) {
                $nomargn = ' lastcols'; 
            }else{
                $nomargn = '';
            }
            
            $rating    = esc_html( get_post_meta( get_the_ID(), '_tour_rating', true ) );
            $tourprice = get_post_meta( get_the_ID(), 'tourprice', true );
            $days      = get_post_meta( get_the_ID(), 'days', true );
        
            if( $rating == 0 ){
                $rating1 = '<i class="fa fa-star"></i>'; 
            }else{ 
                $rating1 = '';
            }
            
            if( $rating == 1 ){
                $rating2 = '<i class="fa fa-star"></i><i class="fa fa-star"></i>'; 
            }else{
                $rating2 = '';
            }
            
            if( $rating == 2 ){ 
                $rating3 = '<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; 
            }else{
                $rating3 = '';
            }
            
            if( $rating == 3 ){
                $rating4 = '<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; 
            }else{
                $rating4 = '';
            }
            
            if( $rating == 4 ){
                $rating5 = '<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>'; 
            }else{
                $rating5 = '';
            }
        
            if( empty( $days ) ) {
                $days_info = ''; 
            }else{
                $days_info = '<i class="fa fa-clock-o" aria-hidden="true"></i>'.$days; 
            }

            ?>
            <div class="tours-list <?php echo $nomargn; ?>">
                <div class="tours-thumnailbx">
                    <?php echo get_the_post_thumbnail(); ?>
                    <figcaption>
                        <span class="buttonright"><a href="<?php echo get_the_permalink(); ?>" target="_blank">View More</a></span>
                        <div class="clear"></div>            
                    </figcaption>'                        
                </div>
                <div class="toursdesbox">
                    <span class="spandate"><?php echo $days_info; ?></span>
                    <span class="spanprice"><?php echo $tourprice; ?></span>
                    <div class="clear"></div>
                    <h4><a href="<?php echo get_the_permalink(); ?>"><?php echo get_the_title(); ?></a></h4>
                    <span class="spanrating"></span>
                    <?php echo content( of_get_option('toursexcerptlength') ); ?>
                </div>
            </div>

        <?php } wp_reset_postdata(); ?>
        
        <div class="clear"></div>
        <div class="hover_bkgr_fricc">
            <span class="helper"></span>
            <div>
                <div class="popupCloseButton">X</div>
                <h3>Inquiry Now</h3>
                <?php if( of_get_option('popupform') != '' ) {  echo do_shortcode(of_get_option('popupform'));  } ?>
            </div>
        </div>

    <?php }else{ }
    
    $sea_tours_content = ob_get_clean();

    return $sea_tours_content;
    
}
add_shortcode( 'home_sea_tours_inner', 'travia_home_sea_tours_func' );
//内页Sea Tours短代码
功能travia_home_sea_tours_func_inner($atts){
提取(短码)附件(数组)(
'类别'=>'',
“展示帖子”=>“”,
)美元(附件);;
if(get_query_var('paged')){
$paged=get_query_var('paged');
}elseif(获取查询变量('page')){
$paged=get_query_var('page');
}否则{
$paged=1;
}
$tours\u query=新的WP\u查询(数组(
“post_type”=>“tours”,
“每页帖子”=>$showposts,
“paged”=>$paged,
“订单”=>“asc”,
“tax_query”=>数组(
数组(
“分类法”=>“旅游类”,
“术语”=>$category,
“字段”=>“slug”
)
)
) );
$n=0;
ob_start();
如果($tours\u query->have\u posts()){
而($tours\u query->have\u posts()){$tours\u query->the\u post();
$n++;
如果($n%3==0){
$nomargn='lastcols';
}否则{
$nomargn='';
}
$rating=esc_html(get_post_meta(get_ID(),'u tour_rating',true));
$tourprice=get_post_meta(get_ID(),'tourprice',true);
$days=get_post_meta(get_ID(),'days',true);
如果($rating==0){
$rating1='';
}否则{
$rating1='';
}
如果($rating==1){
$rating2='';
}否则{
$rating2='';
}
如果($rating==2){
$rating3='';
}否则{
$rating3='';
}
如果($rating==3){
$rating4='';
}否则{
$rating4='';
}
如果($rating==4){
$rating5='';
}否则{
$rating5='';
}
如果(空($天)){
$days_info='';
}否则{
$days_info=''.$days;
}
?>

$sea\u tours\u content
变量中的所有函数都设置为echo:
发布缩略图();
永久链接()
标题()
内容()
将这些设置为返回版本:获取帖子缩略图,获取帖子缩略图,获取标题,获取内容。我尝试了此操作,但没有改变,短代码仍然打印在顶部。我更改:
帖子缩略图()->获取帖子缩略图()->获取帖子缩略图(),获取标题->获取标题()内容(当然是获取选项('ToursexCerpLength'))->获取内容(关于获取选项('ToursexCerpLength'))
我不得不稍微调整一下你的代码,因为它扰乱了布局,但是ob_start ob_get_clean确实起作用了!1个问题,我看到你使用了echo获取post_缩略图()。这与仅仅使用post_缩略图(没有echo)有什么不同欢迎…很高兴能为您提供帮助。如果此答案对您有帮助,您也可以提供答案,谢谢。请检查此功能。