WP_DEBUGを条件付きで定義する/管理者のみ/エラーを記録する(すべてのリンクにクエリ引数を追加しますか?)


20

クライアントもアクセスできるサーバー上にサイトを開発していますが、WP_DEBUG管理者のみに表示したいものです。参照Yoastの記事を、この回避する方法について:

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

次のようなWP_DEBUGURLが?debug=true添付されている場合にのみ表示されますhttp://domain.com/?debug=true

デバッグバーはデフォルトでこの情報の一部を保持するかもしれないと思っていました(WP_DEBUGオンになっているかどうかに関係なく)が、そうではないと思うので気が狂っていました。

だから、私が有用だと思っていたのは、現在のユーザーのチェックです(manage_options機能を持っているので、リンクを実行しますadd_query_arg()

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

しかし、私が確信していないのは、これでサイト上のすべてのリンクを有効にするために使用できるフックはありますか?このように、管理者は常に非常に便利だと思ったデバッグを見ます。いつものように助けてくれてありがとう!


この(Yoastの)回避策は、オンザフライのデバッグに非常に役立ちます。また、うまく機能するロギングを有効にしました。私は少し私のコードを変更:if ( isset( $_GET['bug'] ) ) I訪問リンクそれほど/バグのデバッグを参照してください:)?
Jarmerson

回答:


18

ユニバーサルURLフックはないと思います。たくさんのフックがあり、私はそれを見逃したかもしれませんが、私はそれがあるとは思わない。adambrown.infoのフックをご覧ください。URLフックは多数ありますが、普遍的なものではありません。

別の解決策を提案する場合:エラーをファイルに記録します。

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

このコードはwp-config.phpファイルのCodexから直接のものです。そうすれば$_GET、誰が管理者で誰が管理者ではないかをジャグリングしたり整理したりする必要はありません。

編集:

1つの解決策を忘れました。Javascriptを使用してこれを行うことができます。短いスクリプトを使用すると、ページ上のすべてのURLにパラメーターを添付でき、管理者専用のスクリプトを簡単にロードできます。

誰でもエラーがログに記録されるため、「ログ」ソリューションを提案します。あなたの人々が私のようなもので、「ちょっと、そのフォームをやるとサイトが壊れる」のようなエラー「レポート」を送れば、ログに感謝します。:)


私はただ画面上でそれらを見ることに甘やかされていると思います:)しかし、ログファイルはここでより理にかなっています。私の目的についてもう少し研究を行いますが、これは私が今まで出会った中で最高の解決策であるように見えます。ありがとう!
ザック

5
ネイティブロギングは、Webでアクセス可能なファイルに記録するようにハードコーディングされていることに注意してください。これは、本番環境ではあまりお勧めできません。ライブサイトの場合は、PHP経由でプライベート(Webフォルダー外)ログファイルの場所を構成することをお勧めします。
ラースト

9

私の最初のアプローチはごみ箱とs_ha_dumsに対するものでしたが、答えはきれいで、おそらく最善の方法です、もう1つの作業シナリオを提供しましょう:

次の例では、管理者がシステムにログインしたときの24時間(86400秒)有効なCookieを設定します。でWP-config.phpを、一定のWP_DEBUG条件付き存在および前記クッキーの値に応じて定義されます。

警告:WP_DEBUGその後true、同じ日に同じマシンの同じブラウザからログインするすべてのユーザーに設定されます。

のfunctions.php(又はプラグインとして)。

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

参照:Codex>アクションリファレンス> wp_login

のwp-config.phpの

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}

Andrew Nacinはその記事についてコメントし、言及するにinitは遅すぎて何の効果もありません。私もこれを試してみましたが、うまくいきませんでした。
ザック

定数は再定義できません。定数に触れることなくエラー報告レベルを変更できますが、完全ではありません。またinit、興味のあることの前に起こっていることがたくさんあります。
ラースト

受け入れられた答えは最も実行可能な解決策であると思いますが、完全性のために、この新しいアプローチは画面上のデバッグ通知で仕事をするべきです。
ヨハネスPille

非常にクールな回避策-間違いなくこれ
ザック

1
@s_ha_dum:すべての答えを覚えているわけではありません-少なくとも私は覚えていません(以前に自分の答えをグーグルで調べたことがあります)。これは覚えていますが。私が最初に答えて、絶対にがらくたを書いた。まったく適用されませんでした。私は、少なくとも99.5%の資格がない限り答えないという方針に従います(ほぼ同じことがあなたにも当てはまると思います)-ここで私は目標から外れていました。それが私を困らせたので、数時間後、これが受け入れられた答えを得た後、私はまだこれについて考えていて、上記を思いつきました。私もそれはかなり滑らかだと思う-気づいてくれてありがとう。
ヨハネスピレ

3

あなたの質問に正確に答えているわけではありませんが、個人的な経験から、URLではなくIPアドレスを照合することでデバッグモードを有効にする方が良いとわかりました。

リンクを変更する必要があり、WPが必要なユーザー機能を読み込む前に管理者を識別する方法を解決します。


私も実際にこのアイデアが好きです-だからpastebin.com/m22KNakhのようなことをしたなら...理論的には正しいでしょうか?localhostで期待されるecho $_SERVER['REMOTE_ADDR']収量::1を実行しますか?正直なところ、別のログファイルのように聞こえますが、この方法は(ホームIPが常に変化するように見えるため)良いアイデアかもしれません。
ザック

@Zachそう、::1IPv6バージョンです127.0.0.1。ダイナミックIPの作成はあまり便利ではありませんが、とにかくこれをライブスタッフの一時的なトラブルシューティングテクニックとして扱うだけです。適切なローカルデバッグセットアップを置き換えません。
15:19にラースト

ああ、知らせてくれてありがとう。ここの両方のオプションとまったく同じように、@ s_ha_dumの回答(私が支持したコメントに加えて)を使用しますが、これも素晴らしいです。再びありがとう、本当に感謝しています!
ザック

1

これも可能なトリックですが、そこに定義されているwp-config.phpので、あなたWP_DEBUGはこれを置く必要があります:

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

?debugsecret=debugsecretデバッグするページのURLに追加します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.