web-dev-qa-db-ja.com

WP_DEBUGを条件付きで/管理者のみに/エラーをログに記録します(すべてのリンクにquery argを追加しますか?)

私はクライアントが同様にアクセスできるサーバー上のサイトを開発しています、そして私がしたいのは管理者のためだけにWP_DEBUGを見せることです。 Yoastの記事 を参照してください。

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

WP_DEBUGのように?debug=trueが付いているURLに対してのみhttp://domain.com/?debug=trueを表示します。

Debug Bar はデフォルトでこの情報の一部をそこに保持すると考えていました(WP_DEBUGがオンになっているかどうかは関係ありません)。

だから、私が有用だと思っていたのは、現在のユーザーをチェックすること(manage_options機能を持っていて、それから add_query_arg() を通してリンクを走らせることです):

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

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

20
Zach

私は普遍的な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にパラメータを追加できます。管理者専用のスクリプトを簡単に読み込むことができます。

みんなのためのエラーが記録されているので私はまだ「ログ」の解決策を提案したいと思います。あなたの人々が私のようで、「あなたがそのフォームを実行するとサイトは壊れています」のようなエラーの 'レポート'を送ってきた人はログに感謝します。 :)

18
s_ha_dum

私の最初のアプローチはゴミ箱のためのものであり、s_ha_dumsの答えはきれいで、おそらくそれを導く最良の方法ですが、もう1つ実用的なシナリオを提示しましょう。

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

警告:同じマシンの同じブラウザから同じ日にログインすると、WP_DEBUGtrueに設定されます。

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 );

参照してください: コーデックス>アクションリファレンス> wp_login

wp-config.php

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

それはあなたの質問に正確には答えません、しかし個人的な経験から私はURLの代わりにIPアドレスを一致させることによってデバッグモードを有効にすることがより良いことがわかりました。

これはリンクの修正を必要とし、WPが必要なユーザー機能をロードする前にadminを識別する方法を解決します。

3
Rarst

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

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

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

1
prosti

静的IPがある場合は、次のようにします。

if ('YOUR_IP_ADDRESS' == $_SERVER['REMOTE_ADDR']) {
    define('WP_DEBUG', true);
} else {
    define('WP_DEBUG', false);   
}

出典: DEBUGGING WORDPRESS - プロダクションサイトでのWP_DEBUGの使い方

1
jpussacq