サポート » 使い方全般 » functions.php内からcookieは参照できないでしょうか?

  • 以下のようなソースでクッキーを発行しています。

    javascript
    ----------------------------------

    jQuery(document).ready(function() {
        var formfield;
        jQuery('#hoge').click(function() {
            jQuery('#hogehoge').addClass('image');
            formfield = jQuery('.image').attr('name');
            tb_show('', 'media-upload.php?type=image&TB_iframe=true');
    	jQuery.cookie('bora',1);
            return false;
        });

    ----------------------------------

    functions.php
    ----------------------------------

    add_filter('wp_handle_upload', 'mytheme_another_save_file');
    function mytheme_another_save_file($file) {
    $bora2 = $_COOKIE["bora"];
    echo htmlspecialchars($bora2);
    }

    ----------------------------------

    結果は何も表示されません。

    chromeの要素を検証ツール(firebugのような)でクッキーを参照すると
    ブラウザには保存されていることが確認できましたので
    (bora 1)
    php側での呼び出しがうまくいっていないと予想しています。

    functions.php内からブラウザに保存されたクッキーを
    参照するためには何か設定などが必要なのでしょうか?

    どうぞよろしくお願いいたします。

    【環境】
    wordpress 3.1.4
    さくらレンタルサーバ スタンダード

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

    (@jim912)

    eiowq87mv23kさん、こんにちは。

    ファイルアップロードは、通常ajaxで行われるのでバックグラウンドでの処理となります。
    参照出来ていないのではなく、表示がされていないだけという可能性はありませんか?

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    jim912さん

    お世話になります。ご回答ありがとうございます。
    質問の書き方がわかりずらくもうしわけありません。

    ファイルアップロードは問題なく動作しており、
    管理画面に呼び出すことができています。
    サーバ上のフォルダにもファイルが保存されているのを確認しております。

    画像を複数上げて加工するということがしたく
    独自のカスタムフィールドを2個追加しています。
    そこにあるアップロードボタンを押したときに

    jQuery('#hoge').click(function() {
    jQuery.cookie('bora',1);
    }

    とクッキーを追加して、ブラウザのchrome版firebugでは
    クッキーが追加されているというところまでは確認が取れたのですが
    functions.phpで使うというところで
    echo $bora;【結果:何も表示されず】や
    var_dump($bora);【結果:string(0) “”】としても
    クッキーの値が取れないという状況です。

    ちなみにjQueryは下記のようにfunctions.phpから呼び出しております。

    add_action('admin_print_scripts', 'add_my_js');
    function add_my_js() {
        wp_enqueue_script('admin_print_styles1', '/wp-content/themes/hoge/jquery.cookie.js');
        wp_enqueue_script('admin_print_styles2', '/wp-content/themes/hoge/my_admin_scripts.js');
    }

    何かお心あたりがありましたら
    ご教授のほどお願いいたします。

    モデレーター jim912

    (@jim912)

    ajaxでの処理は、var_dumpやechoしても画面上には表示されません。検証であればファイルへの書き出しにしましょう。

    トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    jim912さん

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

    検証したことを書かせていただきます。
    長文失礼いたします。

    ファイルへの書き出しというのは下記のようなことで
    よろしかったでしょうか。

    add_filter('wp_handle_upload', 'mytheme_another_save_file');
    function mytheme_another_save_file($file) {
    $bora2 = $_COOKIE["bora"];
    $fp = fopen("sample.txt", "w");
    fwrite($fp, $bora2);
    fclose($fp);
    }

    実行してもsample.txtには何も表示されませんでした。

    ajaxでの処理というのはmedia-upload.phpでの処理ということでしょうか。
    察しが悪くもうしわけありません。

    ちなみにその後検証を続けましたら
    他のアクションフック
    add_action('save_post'
    ではクッキーの値を取得することができましたので
    functions.phpからはクッキーの値が取得できていることがわかりました。
    お騒がせいたしました。

    しかしながら
    add_filter('wp_handle_upload'
    このフィルターフック内からだとクッキーの参照ができません。
    何か制限があるか、フックや関数の実行の順番がおかしいのだと思います。

    自分としては下記のような動きを望んでいます。

    jQuery('#hoge').click(function() {//独自追加したカスタムフィールドのボタンが押されたら実行
    	jQuery.cookie('bora',1);//クッキー追加※メディアアップローダ立ち上げの前に持ってきてみましたがだめでした
            jQuery('#hogehoge').addClass('image');
            formfield = jQuery('.image').attr('name');
            tb_show('', 'media-upload.php?type=image&TB_iframe=true');//メディアアップローダ起動
            return false;
    }

    その後functions.phpに実行が移り↓

    add_filter('wp_handle_upload', 'mytheme_another_save_file');//メディアアップローダから画像を選択ボタンを押したとき実行
    function mytheme_another_save_file($file) {
    $bora = $_COOKIE["bora"];//クッキー取得
    if($bora == 1){
    echo "クッキー1の処理";
    } else {
    echo "クッキーそれ以外の処理";
    }
    //クッキーは独自追加した複数のカスタムフィールドを判別するために使用します。
    //(どのカスタムフィールドから画像を上げたか)
    //ですのでクッキーではなく変数でもかまわないのですが、jQuery.post、jQuery.ajaxでも
    //テストしてみてもうまくいっていない状況です。
    }

    文章で説明がしずらく誠に恐縮ではございますが
    また何かお心当たりがありましたら
    教えていただければ幸いです。

    自分でも引き続き思いつく限り検証を続けたいと思います。
    どうぞよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「functions.php内からcookieは参照できないでしょうか?」には新たに返信することはできません。