Ich habe einen Shortcode für eine Sitemap-Seite erstellt. Wenn ich auf der Seite eine Änderung vornehme und auf "Aktualisieren" klicke, wird ein bereits gesendeter Header-Fehler angezeigt. Unten ist mein Shortcode und die beiden Fehlermeldungen. Ich frage mich, ob ich ob_start()
und ob_get_clean()
in meine Funktion einarbeiten muss, aber ich bin nicht zu 100% sicher, wie sie formatiert werden soll.
function site_map2( $atts ) {
$atts = shortcode_atts(
array(
'exclude' => '',
), $atts );
return '<ul>' . wp_list_pages('exclude=' . $atts['exclude'] . '&sort_column=post_title&title_li=') . '</ul>';
}
add_shortcode( 'SiteMap2', 'site_map2' );
Hier sind die Fehlermeldungen:
Warnung: Header-Informationen können nicht geändert werden - Header, die bereits von (Ausgabe gestartet um /public_html/wp-includes/post-template.php:1205) in /public_html/wp-admin/post.php in Zeile 197 gesendet wurden
Warnung: Header-Informationen können nicht geändert werden - Header, die bereits von (Ausgabe gestartet um /public_html/wp-includes/post-template.php:1205) in /public_html/wp-includes/pluggable.php in Zeile 1167 gesendet wurden
Die Anpassung meiner Funktion unten hat das Problem behoben, aber ich wollte sicherstellen, dass dies der richtige Weg ist, um mit dem Shortcode umzugehen. Ich habe ob_start () hinzugefügt; und ob_get_clean (); zur Funktion. Ist das die richtige Art, mit so etwas umzugehen?
function site_map2( $atts ) {
$atts = shortcode_atts(
array(
'exclude' => '',
), $atts );
ob_start();
echo '<ul>' . wp_list_pages('echo=false' . '&exclude=' . $atts['exclude'] . '&sort_column=post_title&title_li=') . '</ul>';
return ob_get_clean();
}
add_shortcode( 'SiteMap2', 'site_map2' );
Sie müssen den Wert von wp_list_pages
und nicht 'echo' standardmäßig zurückgeben.
'Echo'
(bool) Gibt an, ob die Liste der Seiten wiederholt werden soll. Voreinstellung ist true.
return '<ul>' . wp_list_pages( 'echo=false' . '&exclude=' . $atts['exclude'] . '&sort_column=post_title&title_li=') . '</ul>';