мой вывод короткого кода всегда отображается в верхней части моего настраиваемого шаблона.
настраиваемый шаблон
$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 (), который я читаю в других сообщениях, но все еще не работаю.
Ваш обратный вызов для короткого кода будет выводить контент, а не возвращать его, поэтому вы видите его в верхней части страницы.
Использование буферизации вывода ( 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' );