Utilizarea ob_start() într-un plugin
Învăț cum să construiesc un plugin WordPress. În codul exemplu al plugin-ului, am următorul PHP/HTML:
ob_start();
// alte secțiuni de cod pentru 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('Save Changes'); ?>" />
</form>
</div>
<?php } ?>
Inițial, acest cod genera avertismentul "Headers already sent" înainte să descopăr ob_start. După implementarea ob_start nu mai primesc avertismentele... dar folosesc corect această funcție doar adăugând ob_start la începutul fișierului plugin-ului meu?

Nu, aceasta nu este o utilizare corectă a ob_start()
. Primești avertismentul pentru că scriptul tău afișează cod înainte ca antetele paginii să fie trimise - adică afișezi conținut înainte de începutul paginii HTML.
Fără a ști ce se întâmplă în // alt cod al plugin-ului
este dificil să spun exact care este problema. Presupun că apelezi plugin_rvce_options_page()
undeva în rădăcina fișierului functions.php în loc să o folosești într-o funcție care afișează pe o pagină de administrare. În orice caz, încearcă să rezolvi problema și nu folosi ob_start()
ca soluție de rezervă.

Cu siguranță nu ar trebui să folosești ob_start()
pentru a preveni afișarea prematură a codului HTML. Mai degrabă ar trebui să folosești add_action()
la începutul plugin-ului pentru a începe afișarea codului în locul potrivit.
Pentru backend hook-ul obișnuit este add_action ('admin_init','your_main_function');
Pentru frontend hook-ul obișnuit este add_action ('wp_head','your_main_function');
Iată o listă cu toate hook-urile disponibile: https://codex.wordpress.org/Plugin_API/Action_Reference

Ieșirea apare atunci când apelezi funcția plugin_rvce_options_page, nu atunci când o declari. Încearcă asta:
// restul codului pluginului
<?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('Salvează modificările'); ?>" />
</form>
</div>
<?php
return ob_get_clean();
}
?>
