サポート » 使い方全般 » functions.php の書き方

  • 解決済 Hirocking

    (@hirocking)


    アイキャッチを使えるようにするため、functions.php に記述をすると良いということで、

    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );

    と記入しました。
    ところが、保存してアップロードすると、ブログとダッシュボードの双方の一番上にこのコードの文字がそのまま(改行なしで)表示されてしまいました。
    アイキャッチは有効にならないままです。

    すこし調べてみて、コードを次のように書き換えました。

    <?php
    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );
    ?>

    その後、問題なく動くようになりました。
    ところが、奇妙なことに、以前作った別のテーマを見てみると、前出の

    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );

    のままで動いています。
    実は、以前作ったテーマは Artisteer で出力した functions.php に加筆した形でした。

    この違いはどんな条件でできるのでしょうか。

    できれば、<?php ~  ?> を記入せずに使いたのです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター jim912

    (@jim912)

    Hirockingさん、こんにちは。

    phpのファイルには、htmlとphpを混在させて記述することが出来ます。
    <?php ?> の内側がphpのプログラムとして認識され、外側は通常のhtmlとして表示されます。

    ですので、どんなphpのファイルであろうと、phpで処理される部分は、<?php ?>で括られている必要があります。

    テンプレートファイルである、header.phpなどは、部分的に<?php ?>が記述されている程度ですが、テーマのfunctions.phpなどは、全てがphpのプログラムとなるため、基本的には全体を<?php ?>で括られていることがほとんどです。

    Hirockingさんのfunctions.phpがどのようになっているかは分かりませんが、記述した箇所が、<?php ?>の外側でhtmlとして処理される部分であったのではないかと思われます。

    トピック投稿者 Hirocking

    (@hirocking)

    ご回答ありがとうございます。

    ネットで検索すると、「このコードをfunctions.phpに書きこめば大丈夫」みたいなことが書かれていて、そのコードが、

    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );

    と、<?php ?> で区切られていないことが多くて、そのまま書いただけでは動かず、

    どういう事なんだろう???

    と悩んでいましたが、

    <?php ?>

    で区切ればいいということなんですね!

    自分の functions.php を見てみたところ、

    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );

    このコードが、最終行でした。
    HTMLで処理されて動いてるのでしょうか。

    質問につぐ質問ですみません。

    モデレーター jim912

    (@jim912)

    すみませんが、今いただいている情報では

    Hirockingさんのfunctions.phpがどのようになっているかは分かりませんが、記述した箇所が、<?php ?>の外側でhtmlとして処理される部分であったのではないかと思われます。

    としか回答できません。

    こんにちは、

    自分の functions.php を見てみたところ、

    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );

    このコードが、最終行でした。
    HTMLで処理されて動いてるのでしょうか。

    ファイルの末行まで、PHPの場合には、ファイル末の?>を省略する事が出来ます。
    このような省略は、インクルードした場合などに、行末?>の後の改行や空白が、悪影響を与える事を防止するなどの目的で、意識的に使われる事があります。

    functions.phpはインクルードして利用されるファイルですから、そうなっている事もあると思います。

    ただし、ヒアドキュメント形式で記述しているような場合には、ファイル末でも?>が必要になる事もあります。

    ども。

    .phpのファイルは、PHPで書かれている”部分もある”ファイルとして扱われるため、
    PHPで書かれている部分は、<?php と ?>でPHPであることを示さなければなりません。

    <?php と ?>で囲まれていない部分は、そのまま出力されます。
    Wordpressの一部分としてPHPを使う場合は、ブラウザに出力され、HTMLファイルと
    同様に扱われます。

    この機能がPHPにあるので、HTMLタグと混在してPHPが使えて、
    <ul><li><?php echo function();?></li></ul>
    なんて使い方ができるわけです。

    さて、<?phpで始まっているけれども、?>を書く前にファイルが終わっている場合は、
    ?>がファイルの最後にあるものと解釈してPHPは扱います。

    なので、純粋にPHPをプログラム(特にライブラリ)として使う場合には、
    ファイルの先頭、最初の行に<?phpを書いて、最後に?>は書きません。
    書かなくても良いんじゃなくて、もう書かないほうが良いと覚えてしまってください。

    これは、?>の後にスペースやタブ、改行などが入っていると、それが出力されて
    思わぬところで不具合として現れるためです。
    具体的には、特定のブラウザで表示が崩れたり、headers already sent…なんてエラーになってwordpressが正しく動かないこともあります。
    具合の悪いことに、この不具合は、大抵別のCSSファイルやPHPファイルを変更したときに現れることが多いので、単純なミスなのに原因を見つけ出すのが難しいタイプの不具合です。

    そういうわけで、functions.phpには、
    ファイルの1行目の1文字目から、<?phpを書いて、最後に?>はつけない方が良いです

    functions.php に
    add_theme_support( ‘post-thumbnails’ );
    set_post_thumbnail_size( 120, 120, true );
    記述をすると良い

    と書いた人には、このへんは常識ということで、わざわざ書かなかったということです。

    この辺は、プログラミング言語としてのPHPの基礎なんですが、
    wordpressのカスタマイズをしたい・・・と思ってPHPをかじった人には
    説明されなきゃわかんない・・・・って話ですよね。

    Artisteer で出力した functions.php には、先頭に<?phpが書いてあったはずです。
    今回は、

    <?php ?>
    で区切ればいいということなんですね!

    というのは、もちろんそれでも場合によってはうまく動くかもしれませんが、
    新たにfunctions.phpファイルを自分で作ったなら、その1行目の1文字目から、<?php
    を自分で付け加えなれればいけない。
    と思っていた方が良いでしょう。

    参考になれば。

    トピック投稿者 Hirocking

    (@hirocking)

    みなさん、最高に良くわかりました!

    ありがとうございました!!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「functions.php の書き方」には新たに返信することはできません。