サポート » 使い方全般 » wordpress4.5.2でuser関連の変数や関数でエラー

  • 解決済 hokutonojikei

    (@hokutonojikei)


    wordpress4.5.2でuser関連の変数や関数で以下のエラーが出ます。
    get_currentuserinfo()
    wp_get_current_user()
    current_user_can()
    検索してみたところget_currentuserinfo()は4.5.2から非推奨になり
    wp_get_current_user()に変更することを推奨されているということでしたが
    wp_get_current_user()は内部的にget_currentuserinfo()を使っているという記事があったり
    wp_get_current_user()でも同じエラーがでており解決方法が見つけられず
    この場をお借りしている状況です。

    Warning: Cannot modify header information – headers already sent by (output started at /functions.php:1) in /wp-includes/option.php on line 823

    Warning: Cannot modify header information – headers already sent by (output started at /functions.php:1) in /wp-includes/option.php on line 824

    ユーザーごとに管理画面の処理を変えるという
    条件分岐を行いたいのですが
    解決方法をご存知の方がいらっしゃいましたら
    ご教授いただければ嬉しいです。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • munyagu

    (@munyagu)

    output started at /functions.php:1
    というエラーメッセージがとても怪しい気がするのですが、
    get_currentuserinfo()やwp_get_current_user()をコメントアウトするとエラーは消えるでしょうか。

    消えない場合、functions.phpに文法エラーがないかご確認いただけますでしょうか。

    トピック投稿者 hokutonojikei

    (@hokutonojikei)

    munyaguさん回答ありがとうございます。
    また返信が遅れまして申し訳ありません。

    get_currentuserinfo()
    wp_get_current_user()
    をコメントアウトで一応エラーは消えます。

    文法エラーのところから探っていますが
    atomのphp-lint等でもエラーは吐き出されず調査中です。

    文法エラーの可能性も高い気もしますので
    改めてコードを見てみます。

    ※すみません下記のエラーは正確にはこのような形でした。
    output started at /functions.php:830

    モデレーター jim912

    (@jim912)

    検索してみたところget_currentuserinfo()は4.5.2から非推奨になり
    wp_get_current_user()に変更することを推奨されているということでしたが
    wp_get_current_user()は内部的にget_currentuserinfo()を使っているという記事があったり
    wp_get_current_user()でも同じエラーがでており解決方法が見つけられず
    この場をお借りしている状況です。

    wp_get_current_user() が内部的に呼んでいるのは、_wp_get_current_user() になります。

    Code Reference wp_get_current_user ()

    エラーの内容からすると、option.php の823, 824 行目は、ユーザー設定用のcookie を設定する前に、ヘッダーが出力済みであるというエラーとなっています。

    1. 上記の2つのエラーメッセージの前にも、なんらかのエラー出力がありますでしょうか。
    2. どこにどのように、wp_get_current_user() を記述しているのか、記述されている関数まるごと提示いただけると、原因の特定がしやすくなります。

    トピック投稿者 hokutonojikei

    (@hokutonojikei)

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

    また返信が遅くなりまして申し訳ありません。

    >wp_get_current_user() が内部的に呼んでいるのは、_wp_get_current_user() になります。

    そうなんですね!勉強になりました。リンクを参考にさせていただきます。

    1.エラーは特にない状態です。
    デバックモードをtrueにしてもみましたが特に検出されませんでした。
    2.は以下のようにしております。

    $current_user = wp_get_current_user();
    $user_name = $current_user->user_login;
    if($user_name == "テストユーザー") {
    	echo 'イフ判別成功';
    	add_action('admin_menu', 'adminCustomize');
    }
    function adminCustomize() {
    		remove_menu_page('upload.php'); // メディア
    		remove_menu_page('link-manager.php'); // リンク
    		remove_menu_page('edit.php?post_type=page'); // 固定ページ
    		remove_menu_page('edit-comments.php'); // コメント
    		remove_menu_page('themes.php'); // 概観
    		remove_menu_page('plugins.php'); // プラグイン
    		remove_menu_page('users.php'); // ユーザー
    		remove_menu_page('tools.php'); // ツール
    		remove_menu_page('options-general.php'); // 設定
    		remove_menu_page('profile.php');//プロフィール
    }

    functions.phpにこれ以外のソースは記述せずにテストしてみましたがエラーが出てしまいました。
    ご教示いただきましたcookieのところで以下の動きがありました。
    一度ログインして以下の2行をコメントアウトします。
    //$current_user = wp_get_current_user();
    //$user_name = $current_user->user_login;
    するとエラーは消えてメニュー(メディア、リンクなど)が表示されます。
    そのままクッキーを消さずに上記2行のコメントアウトを消去すると
    エラーが出ないままメニューのところがremoveされます。

    また余談ですがwordpressのバージョンが最新の4.5.3なのですが(wp-includes/version.phpにて確認)4.5.3へのアップデートの案内が表示されリンクも押せる状態になっています。
    ですので一度wpの再インストールをしてみようと考えています。
    結果が出ましたらこちらにまた書き込みをさせていただきます。

    WordPressを新規インストールし、functions.php の末尾に上記コードを入れ、
    ユーザーのみ「テストユーザー」 –> 自分のユーザー名に変更したら、正しくメニューが消えましたよ。
    特にPHPエラーは出ていないようです。

    なので
    1. そのコードをいれる場所を変える(末尾とか)

    2. 他のブラウザで試してみる

    3. ブラウザの Cookieとキャッシュをクリアをしてから試す

    などまだやりようはあるかなと思います。

    トピック投稿者 hokutonojikei

    (@hokutonojikei)

    kimipoohさんコメントありがとうございます。

    また検証が遅れまして申し訳ございませんでした。

    1.2.3は検証してみましたが結果は同じでした。

    その後再度インストールを実施して4.5.3になったところ
    エラーが発動する箇所が変わりました。

    echo ‘イフ判別成功’;

    /wp-includes/option.php on line 823
    /wp-includes/option.php on line 824

    このechoの1行をコメントアウトすると

    上記エラーが出なくなりました。

    目的としてユーザーごとにメニューなどの項目を
    非表示にしたいということで上記コードを書いており、
    横着をしてcssを直接書いていた部分があったので
    なるべくPHPに置き換えましたが
    画面上部プルダウンの表示オプションの部分と
    ヘルプの部分を非表示にするのに
    cssを使わない方法が見つけられませんでした。

    本来echoでcssを書いたりするのは良くないのでしょうか。
    恐縮ですがphpで書く方法などもしお心当たりがありましたら
    よろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    http://mypacecreator.net/blog/archives/1041

    あと、cookieの仕組みについて良く理解しておくべきです。
    setcookie

    setcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。 ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。 <html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。

    トピック投稿者 hokutonojikei

    (@hokutonojikei)

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

    おっしゃる通りcookieやwordpressの実行過程が理解できておらず
    現在書籍などを読んでいるのですがまだまだ分かっておりません。
    何度かphpのみでアプリケーションを作る必要がありそうですorz

    add_action('admin_print_styles', 'admin_css_custom');
    function admin_css_custom() {
    echo '<style>#hogehoge {display: none;}</style>';
    }

    ご提示いただきましたページのソースを参考に
    admin_print_stylesフックを適用したところすんなり動きました。

    最初のエラー発生個所は色々いじっているうちに深みにはまり
    誤った認識だったと思いますので改めて訂正させていただきます。

    ↓この質問は間違い。当方の勘違いです。

    wordpress4.5.2でuser関連の変数や関数で以下のエラーが出ます。
    get_currentuserinfo()
    wp_get_current_user()
    current_user_can()

    検証するまでに時間がかかってしまい申し訳ありませんでした。
    またお付き合いいただきました皆様ありがとうございました。
    おかげさまで色々と勉強になりました。
    これにて解決とさせていただきます。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「wordpress4.5.2でuser関連の変数や関数でエラー」には新たに返信することはできません。