サポート » 使い方全般 » functions.php内でのグローバル変数について

  • 解決済 eiowq87mv23k

    (@eiowq87mv23k)


    functions.php内で以下のような記述をしたところエラーが出てしまいました。
    //+++++++++++++++++++++++++++++++++++++++++
    add_action(‘admin_menu’, ‘add_my_meta_box’);

    add_action(‘save_post’, ‘save_custom_field_postdata’);

    add_action(‘edit_post’, ‘pcn’);

    //+++++++++++++++++++++++++++++++++++++++++
    $burl = “”;

    add_filter(‘wp_handle_upload’, ‘mytheme_another_save_file’);

    function mytheme_another_save_file($file) {
    global $burl;
    $burl = $file[‘url’];

    //echo $burl;//←このechoでは表示できました。

    return $file;
    }

    function pcn() {
    global $burl;
    echo $burl;
    echo “
    “;
    var_dump($burl);
    }

    新規投稿画面にて題名を入力した後
    本文入力欄の下に表示されたエラー
    NULL
    Warning: Cannot modify header information – headers already sent by (output started at /home/hoge/www/hoge/wp-content/themes/hoge/functions.php:183) in /home/hoge/www/hoge/wp-includes/class-wp-ajax-response.php on line 129

    上記エラーが出つつもそのまま新規投稿画面の
    公開ボタンを押した後に出るエラー
    NULL
    Warning: Cannot modify header information – headers already sent by (output started at /home/hoge/www/hoge/wp-content/themes/hoge/functions.php:183) in /home/hoge/www/hoge/wp-includes/pluggable.php on line 897

    上記ソースの関数pcn()内echo $burl;で
    画像urlが表示されると思ったのですが
    何か書き方がまずいのでしょうか。

    functions.php内でのグローバル変数について
    関数間のスコープに制限などがあるのでしょうか。

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

    (@hissy)

    エラーがでているfunctions.phpの183行目付近のソースをコピペしてください

    で、Warningの内容としてはヘッダーがすでに送信されているよ、ということで、functions.phpの183行目で何らかの出力があるのが原因です。

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    hissyさんご回答ありがとうございます!

    `183 function pcn() {
    184 global $burl;
    185 echo $burl;
    186 echo “<br />”;
    187 var_dump($burl);`

    となっています。

    仰るとおりこの関数を実行しないと
    エラーはなくなります。

    まずはfunctions.php内の関数同士で
    変数の値をやり取りしたいのですが
    何か方法がありますでしょうか。

    モデレーター Takuro Hishikawa

    (@hissy)

    var_dumpを消すとどうなりますか

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    hissyさん度々のご回答ありがとうございます!

    以下2パターンのテストをしてみましたがいずれも
    最初のエラーと同じものが出てしまいます。

    183 function pcn() {
    184 global $burl;
    185 echo $burl;
    186 echo "<br />";
    187 //var_dump($burl);
    183 function pcn() {
    184 global $burl;
    185 //echo $burl;
    186 echo "<br />";
    187 //var_dump($burl);

    下記のテストでは少しエラーメッセージが変わりました。

    183 function pcn() {
    184 global $burl;
    185 //echo $burl;
    186 echo "<br />";
    187 var_dump($burl);

    最初に投稿しましたエラーメッセージの
    NULLの部分がstring(0) “”となりました。

    なにかヒントがありそうな感じもしますが
    自分の知識では見当がつきません・・・

    またなにか心当たりがありましたら
    書き込みをお願いいたします。

    モデレーター Takuro Hishikawa

    (@hissy)

    というか、edit_postのタイミングでechoするのは何故?
    とにかく、pcn()で何か出力すればすべて同じエラーになるはずです。解消する方法はありません。

    モデレーター jim912

    (@jim912)

    アップロードした画像のurlを、edit_postのタイミングで利用したいのだと思いますが、これは無理です。

    グローバル変数といっても有効なのは、同一プロセス内でのことであって、プロセスをまたいで受け渡しを行うには、データベースやセッションなどを利用しなければなりません。

    画像のアップロードは、メディアアップローダーからajaxを用いて行われるため、その時点で値を取ることはできても、記事の保存時には利用できないのです。

    モデレーター Takuro Hishikawa

    (@hissy)

    さすが世話役…。なるほど、そういうことがやりたいのか。
    WordPress標準のメディアアップローダーを使って、画像のURLだけ保存するほうがいいと思う。
    参考: http://www.webopixel.net/wordpress/436.html

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    hissyさん

    度々のご回答ありがとうございます!
    書き方がわかりずらくすみません。

    参考URL詳しく見てみたいと思います。
    また疑問が出ましたら質問させてください。

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    jim912さん
    いつもお世話になっております。ありがとうございます!

    >グローバル変数といっても有効なのは、同一プロセス内でのことであって、
    >プロセスをまたいで受け渡しを行うには、データベースやセッションなどを
    >利用しなければなりません。

    そうなんですね!
    セッションの仕組みなど知識が不足していたので
    いろいろと自分でテストしてみます。

    また疑問が出ましたらこちらにお世話になることもあると思いますが
    どうぞよろしくお願いいたします。

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    hissyさん、jim912さん

    sessionを利用したらfunctions.php内の
    関数間で値をやり取りすることができました!

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

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「functions.php内でのグローバル変数について」には新たに返信することはできません。