为什么我的easytimetable短代码总是在所有内容之前?我怎样才能在想要的地方展示它?我试图改变从回声,打印到返回,但我没有编码,所以你可以帮助我吗?
function easytimetable( $atts, $content = null ){
extract(shortcode_atts(array(
'id' => 1
), $atts));
$id = (int)$id;
$nonce = wp_create_nonce('displayPlanning');
$content = do_shortcode($content);
require_once SYET_PATH . 'public/class-easy-timetable-public.php';
$display = Easy_Timetable_Public::syet_displayPlanning($id, $nonce, $content);
//var_dump($content);
return $display;
}
function register_easytimetable_shortcodes(){
add_shortcode('easytimetable', 'easytimetable');
}
add_action( 'init', 'register_easytimetable_shortcodes');
答案 0 :(得分:2)
要确保返回内容而不打印内容,请使用输出缓冲区:
function easytimetable( $atts, $content = null ){
ob_start();
extract(shortcode_atts(array(
'id' => 1
), $atts));
$id = (int)$id;
$nonce = wp_create_nonce('displayPlanning');
$content = do_shortcode($content);
require_once SYET_PATH . 'public/class-easy-timetable-public.php';
$display = Easy_Timetable_Public::syet_displayPlanning($id, $nonce, $content);
echo $display; // might be unnecessary
//var_dump($content);
return ob_get_clean();
}
function register_easytimetable_shortcodes(){
add_shortcode('easytimetable', 'easytimetable');
}
add_action( 'init', 'register_easytimetable_shortcodes');
ob_start将指示PHP缓冲(保存)所有输出,而不是直接将其发送到浏览器。 ob_get_clean()将获取该缓冲区的内容,清理缓冲区并关闭输出缓冲。如果这实际上是您看到的早期输出的代码,那么应该照顾它。
回显$ display可能(可能)不需要,但这实际上取决于Easy_Timetable_Public::syet_displayPlanning($id, $nonce, $content)
是仅输出内容还是返回一些(希望按正确顺序)。