web-dev-qa-db-de.com

Shortcode-erzeugende Header haben bereits einen Fehler gesendet

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

1
brandozz

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' );
4
brandozz

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>';
2
jgraup