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

时间:2017-03-03 19:03:27

标签: php wordpress shortcode

我的短代码输出始终显示在我的自定义模板的顶部。

自定义模板

$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()。

1 个答案:

答案 0 :(得分:2)

您的短代码回调将输出内容而不是返回内容,这就是您将其显示在页面顶部的原因。

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

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

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' );