• 解決済 roses

    (@roses)


    親カテゴリーのテンプレートを子カテゴリーにも自動で適用するように、下記のトピックを拝見して記載の関数をfunctions.phpに記述したところ、エラーが出てログインできなくなってしまいました。

    参考トピック

    functions.phpの内容

    <?php
    if ( function_exists('register_sidebar') )
    	register_sidebars(3,array(
            'before_widget' => '<div id="%1$s" class="widget %2$s">',
            'after_widget' => '</div>',
            'before_title' => '<h3 class="title03">',
            'after_title' => '</h3>',
        ));
    
    ?>
    
    <?php
    //追記した関数はここから
    function in_category_family( $parent ) {
        if ( empty($parent) )
            return false;
    
        if ( in_category($parent) )
            return true;
    
        $parent = get_category($parent);
        foreach ( (get_the_category()) as $child ) {
            $child = get_category($child->cat_ID);
            if ( cat_is_ancestor_of($parent, $child) )
                return true;
        }
    
        return false;
    }
    ?>

    PHPエラー(ログイン画面に表示されています)

    Warning: Cannot modify header information – headers already sent by (output started at /home/sites/chicappa.jp/users/中略/wordpress/wp-content/themes/maroudo/functions.php:12) in /home/sites/chicappa.jp/users/中略/wordpress/wp-login.php on line 255

    Warning: Cannot modify header information – headers already sent by (output started at /home/sites/chicappa.jp/users/中略/wordpress/wp-content/themes/maroudo/functions.php:12) in /home/sites/chicappa.jp/users/中略/wordpress/wp-login.php on line 267

    Warning: Cannot modify header information – headers already sent by (output started at /home/sites/chicappa.jp/users/中略/wordpress/wp-content/themes/maroudo/functions.php:12) in /home/sites/chicappa.jp/users/中略/wordpress/wp-login.php on line 269

    現在の症状

    1. ログインできません(関数の記述を削除するとログインできます)
    2. サイトは通常通り表示されています
    3. 追記した関数は動作しているようです
      (各親カテゴリーのテンプレートがそれぞれの子カテゴリーに適用されている)

    環境
    ・チカッパサーバ
    ・オペレーションシステム : Linux
    ・サーバー : Apache
    ・MYSQLバージョン : 4.0.26-standard-log
    ・PHPバージョン : 5.2.6
    ・WordPress2.7.1

    各親カテゴリーのテンプレートをそれぞれの子カテゴリーに自動的に適用できるこの関数はとても便利なのでこれからも使用したいのですが、どのように修正したら良いのでしょうか?
    何卒、ご教授よろしくお願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • functions.php 最後の/>の後ろに改行とかスペースとか入ってませんか?

    トピック投稿者 roses

    (@roses)

    taikiken様

    早速のご回答ありがとうございます。
    ご指摘のように最後に改行やスペースが無いか確認したのですがありませんでした。

    しかし、前述の関数と追記した関数の間の改行を削除してみたところエラーが出なくなりました(汗)

    関数と関数の間に改行を入れてはいけないのでしょうか?
    今後も関数を追加する際に同じエラーを出さないためにも教えていただけると助かります。

    うまく説明できるか自信が無いのですが、

    funtions.phpの中にブラウザ出力要素が入ってはいけません。
    改行コードとかスペースとか見えないものも含まれます。
    .phpファイルはhtmlと混在できるので起こりやすいミスの1つです。

    ?>

    改行コードとして出力

    <?php

    phpブロックの間の改行コードが出力されてしまいます。

    <?phpを1行目に書いて?>を書かない、だと間違いが起きません。
    そのかわり全てをPHPコードで書かないといけません。
    この場合は関数と関数の間に改行が入っていてもかまいません。

    今回はlogin.phpがheaderとHTML出力します。
    もしもfuntions.phpの中にブラウザ出力要素が入っていると、login.phpがheaderを出力する前にfuntions.phpからheader出力が行われ上記のエラーが発生します。
    何らかの出力があるとPHPはheaderを自動的にその前に出力します。

    上記のエラーは
    headerは出力してるのにheaderを出力しようとしている・・・

    モデレーター IKEDA Yuriko

    (@lilyfan)

    たぶん taikiken さんの回答でご理解されていると思いますが、念のため補足しておきいます。

    関数と関数の間に改行を入れてはいけないのでしょうか?

    入れてもいいのですが、同一の <?php...?> ブロック内部に入れてあることが条件です。

    つまり、

    <?php
    function example_above() {
    ...
    }
    
    function example_below() {
    ...}
    ?>

    は OK ですが、以下はダメです。

    <?php
    function example_above() {
    ...
    }
    ?>
    
    <?php
    function example_below() {
    ...}
    ?>

    あと、UTF-8 で記述している場合は BOM なしで保存する必要があります (エディターによっては BOM なしにするためには UTF-8N という形式を指定する場合があります)。

    トピック投稿者 roses

    (@roses)

    taikiken様、lilyfan様

    ご回答ありがとうございます。
    お二方とも丁寧にご説明いただいてありがとうございます。

    <?php…?>ブロックと<?php…?>ブロックの間には改行などを入れてはいけないのですね。
    テンプレートを作成しているのと同じ感覚で改行を入れてしまっていました(汗)
    凡ミスというやつですね、お恥ずかしい(泣)

    とても勉強になりました!
    本当にありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「functions.phpによる(?)ログインエラー」には新たに返信することはできません。