简码输出始终显示在自定义模板的顶部

Shortcode output always showing at top of custom template

我的简码输出总是出现在我的自定义模板的顶部。

自定义模板

$tag= 'the_content';
remove_all_filters( $tag);
$postid = get_the_ID();
$post = get_post($postid);
$content = do_shortcode($post->post_content);

ob_start();
echo $content;
$result = ob_get_contents();
ob_end_clean();
return $result;

自定义简码

function signupform_shortcode( $atts ) {
   extract( shortcode_atts( array(
      'socialmkt' => 'aweber'
      ), $atts ) );

   if($socialmkt == 'aweber'){
      if($display == 'popup') {
        return include_once('modal-aweber.php');
      }

   }
}
add_shortcode('signupform', 'signupform_shortcode');

它位于 html 着陆中间的简码。 我尝试添加 ob_start() 我在其他帖子中看到的但仍然无法正常工作。

您的短代码回调将输出内容而不是 return 它,这就是您看到它出现在页面顶部的原因。

使用输出缓冲 (ob_start() / ob_get_contents()) 是解决问题的有效方法,但是您需要移动代码。

输出缓冲应该在您的短代码回调中进行,其中需要 return 值而不是输出。

function signupform_shortcode( $atts ) {
    extract( shortcode_atts( array(
        'socialmkt' => 'aweber'
    ), $atts ) );

    // Begin output buffering here. Any output below will be stored in a buffer.
    ob_start();

    if ( $socialmkt == 'aweber' ) {
        if ( $display == 'popup' ) {

            // Return, as previously used, doesn't help in this context.
            include_once( 'modal-aweber.php' );
        }

    }

    // Return (and delete unlike ob_get_contents()) the content of the buffer.
    return ob_get_clean();
}
add_shortcode( 'signupform', 'signupform_shortcode' );