I’m learning how to build a WordPress plugin. In the sample plugin code, I have this PHP/HTML:
ob_start();
// other plugin code
<?php function plugin_rvce_options_page() { ?>
<div>
<form action="options.php" method="post">
<?php settings_fields('plugin_options'); ?>
<?php do_settings_sections('plugin'); ?>
<input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />
</form>
</div>
<?php } ?>
Initially, this was causing the warning “Headers already sent” before I found ob_start. After implementing ob_start I don’t get the warnings.. but am I using it correctly by just adding ob_start at the top of my plugin file?
3 Answers
No, this is not a correct use for ob_start()
. You’re getting the warning because your script is outputting code before the page headers are sent – meaning you’re printing output before the html page.
Without knowing what’s going on in your // other plugin code
it’s difficult to say what’s happening exactly. I would guess you’re calling plugin_rvce_options_page()
somewhere in the root of the functions.php file instead of in a function that outputs to an admin page. In any case, try and fix the issue and don’t use ob_start()
as a work-around.