web-dev-qa-db-fra.com

Shortcode produisant des en-têtes déjà envoyés erreur

J'ai créé un shortcode pour une page de plan du site. Lorsque je modifie la page et que je clique sur Mettre à jour, un en-tête déjà envoyé contient une erreur. Ci-dessous mon shortcode et les deux messages d'erreur. Je me demande si je dois intégrer ob_start() et ob_get_clean() dans ma fonction, mais je ne suis pas sûr à 100% de la façon dont elle devrait être formatée.

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

Voici les messages d'erreur:

Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /public_html/wp-includes/post-template.php:1205) dans /public_html/wp-admin/post.php à la ligne 197

Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /public_html/wp-includes/post-template.php:1205) dans /public_html/wp-includes/pluggable.php à la ligne 1167

1
brandozz

Le réglage de ma fonction ci-dessous a résolu le problème, mais je voulais m'assurer que c'était la bonne façon de gérer le code court. J'ai ajouté ob_start (); et ob_get_clean (); à la fonction. Est-ce la bonne façon de gérer quelque chose comme ça?

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

Vous devez renvoyer la valeur de wp_list_pages et non 'echo' par défaut.

'écho'

(bool) S'il faut ou non faire écho à la liste des pages. Vrai par défaut.

return '<ul>' . wp_list_pages( 'echo=false' . '&exclude=' . $atts['exclude'] . '&sort_column=post_title&title_li=') . '</ul>';
2
jgraup