短代码出现在内容之上

时间:2017-11-10 09:55:13

标签: php wordpress plugins shortcode

为什么我的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');

1 个答案:

答案 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)是仅输出内容还是返回一些(希望按正确顺序)。

相关问题