Utilizzo di ob_start() nel plugin
Sto imparando a creare un plugin WordPress. Nel codice di esempio del plugin, ho questo PHP/HTML:
ob_start();
// altro codice del plugin
<?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('Salva Modifiche'); ?>" />
</form>
</div>
<?php } ?>
Inizialmente, questo causava l'avviso "Headers already sent" prima che scoprissi ob_start(). Dopo aver implementato ob_start() non ricevo più gli avvisi... ma lo sto usando correttamente semplicemente aggiungendo ob_start() all'inizio del mio file plugin?

No, questo non è un utilizzo corretto di ob_start()
. Stai ricevendo l'avviso perché il tuo script sta inviando output prima degli header della pagina - significa che stai stampando output prima della pagina HTML.
Senza sapere cosa succede nel tuo // other plugin code
è difficile dire esattamente cosa stia accadendo. Immagino che tu stia chiamando plugin_rvce_options_page()
da qualche parte nella radice del file functions.php invece che all'interno di una funzione che invia output a una pagina di amministrazione. In ogni caso, cerca di risolvere il problema e non usare ob_start()
come soluzione temporanea.

Non dovresti assolutamente usare ob_start()
per prevenire l'output prematuro dell'html. Piuttosto dovresti usare add_action()
all'inizio del plugin per iniziare a generare il tuo codice nel punto giusto.
Per il backend il solito hook è add_action ('admin_init','your_main_function');
Per il frontend il solito hook è add_action ('wp_head','your_main_function');
Ecco una lista di tutti gli hook disponibili: https://codex.wordpress.org/Plugin_API/Action_Reference

L'output viene generato quando chiami la funzione plugin_rvce_options_page, non quando la dichiari. Prova questo:
// altro codice del plugin
<?php function plugin_rvce_options_page() {
ob_start();
?>
<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('Salva modifiche'); ?>" />
</form>
</div>
<?php
return ob_get_clean();
}
?>
