web-dev-qa-db-ja.com

ショートコード生成ヘッダはすでにエラーを送信しています

サイトマップページのショートコードを作成しました。ページを変更して[更新]をクリックすると、ヘッダーの送信エラーが表示されます。以下は私のショートコードと2つのエラーメッセージです。 ob_start()ob_get_clean()を自分の関数に組み入れる必要があるかどうか疑問に思っていますが、それがどのようにフォーマットされるべきかについて100%前向きではありません。

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

これがエラーメッセージです。

Warning:ヘッダ情報を変更できません - すでに197行目の/public_html/wp-admin/post.phpの(/public_html/wp-includes/post-template.php:1205から開始された出力)によって送信されたヘッダ

Warning:ヘッダ情報は変更できません - すでに1167行目の/public_html/wp-includes/pluggable.phpの(/public_html/wp-includes/post-template.php:1205から開始された出力)によって送信されたヘッダ

1
brandozz

以下の機能を調整して問題を解決しましたが、これがショートコードを処理する正しい方法であることを確認したいと思いました。 ob_start()を追加しました。 ob_get_clean();機能に。これは、このようなものを処理するための正しい方法ですか?

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

デフォルトで 'echo' ではなく、 wp_list_pages から値を返す必要があります。

'エコー'

(ブール値)ページのリストをエコーするかどうか。デフォルトはtrueです。

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