我的短代码输出始终显示在我的自定义模板的顶部。
自定义模板
$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()。
答案 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' );