在 WP Admin 中保存 Post 时,Wordpress 短代码输出缓冲呈现内容
Wordpress Shortcode Output Buffering Renders Content When Saving Post in WP Admin
我有一个 WP 短代码给我带来了问题。
基本上,短代码只是使用几个参数从另一个 post 中提取内容。然后加载部分模板。
保存包含短代码的页面时,WP Admin 中出现问题。保存页面更新时确实正确保存,但生成的页面是输出短代码内容的页面。
我在 get_template_part() 周围使用输出缓冲有两个原因:1. 所以我的代码中只有一个模板实例 - 以及 - 2. 因为模板实际上非常庞大并且将所有这些附加到输出变量将是一项艰巨的任务。
短代码在所有方面都可以正常工作,但保存页面时除外。
这是演示该问题的视频:
https://www.awesomescreenshot.com/video/1146323?key=103ae00d841b47cee8a902eb18c8988a
这是我的代码:
function get_main_page_content( $atts ) {
$main_page_id = $atts['main_page_id'];
$section = $atts['section'];
$people_display_option = $atts['people_display_option'];
$GLOBALS['sc_display_option'] = $people_display_option;
ob_start();
if(have_rows('flexible_content', $main_page_id)):
while(have_rows('flexible_content', $main_page_id)): the_row();
if ( $section == 'agenda' ) {
get_template_part('partials/agenda');
}
if ( $section == 'people_cards' ) {
get_template_part('partials/people-cards');
}
endwhile;
endif;
ob_end_flush();
$output = ob_get_contents();
ob_end_clean();
return $output;
}
add_shortcode('get_main_page_content', 'get_main_page_content');
在我看来 ob_end_flush()
不需要而且是多余的。这可能会导致 OB 发送两次,从而导致该代码出现在您的屏幕上。
我想知道如果您删除该行,您的问题是否仍然存在。此外,对于您的确切用例的非常简化的版本,请查看此博客 post:
https://konstantin.blog/2013/get_template_part-within-shortcodes
我有一个 WP 短代码给我带来了问题。
基本上,短代码只是使用几个参数从另一个 post 中提取内容。然后加载部分模板。
保存包含短代码的页面时,WP Admin 中出现问题。保存页面更新时确实正确保存,但生成的页面是输出短代码内容的页面。
我在 get_template_part() 周围使用输出缓冲有两个原因:1. 所以我的代码中只有一个模板实例 - 以及 - 2. 因为模板实际上非常庞大并且将所有这些附加到输出变量将是一项艰巨的任务。
短代码在所有方面都可以正常工作,但保存页面时除外。
这是演示该问题的视频:
https://www.awesomescreenshot.com/video/1146323?key=103ae00d841b47cee8a902eb18c8988a
这是我的代码:
function get_main_page_content( $atts ) {
$main_page_id = $atts['main_page_id'];
$section = $atts['section'];
$people_display_option = $atts['people_display_option'];
$GLOBALS['sc_display_option'] = $people_display_option;
ob_start();
if(have_rows('flexible_content', $main_page_id)):
while(have_rows('flexible_content', $main_page_id)): the_row();
if ( $section == 'agenda' ) {
get_template_part('partials/agenda');
}
if ( $section == 'people_cards' ) {
get_template_part('partials/people-cards');
}
endwhile;
endif;
ob_end_flush();
$output = ob_get_contents();
ob_end_clean();
return $output;
}
add_shortcode('get_main_page_content', 'get_main_page_content');
在我看来 ob_end_flush()
不需要而且是多余的。这可能会导致 OB 发送两次,从而导致该代码出现在您的屏幕上。
我想知道如果您删除该行,您的问题是否仍然存在。此外,对于您的确切用例的非常简化的版本,请查看此博客 post:
https://konstantin.blog/2013/get_template_part-within-shortcodes