it-swarm.com.de

WP_DEBUG bedingt definieren/nur für Administratoren/Fehler protokollieren (Abfrage Argument für alle Links anhängen?)

Ich entwickle eine Site auf einem Server, auf den auch der Client Zugriff hat, und ich möchte WP_DEBUG nur für Administratoren anzeigen. Verweise auf Yoasts Artikel auf einen Weg, um dies zu umgehen:

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

würde WP_DEBUG nur für URLs anzeigen, an die ?debug=true angehängt ist, z. B. http://domain.com/?debug=true

Ich dachte, die Debug-Leiste könnte einige dieser Informationen standardmäßig enthalten (unabhängig davon, ob WP_DEBUG aktiviert ist oder nicht), aber ich dachte an Verrücktheit, da ich nicht glaube, dass dies der Fall ist.

Also, was ich dachte, wäre nützlich, wäre eine Überprüfung für den aktuellen Benutzer (mit der Fähigkeit manage_options und dann Verknüpfungen über add_query_arg() :

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

aber ich bin mir nicht sicher, ob es einen Haken gibt, mit dem ich alle Links auf einer Site mit diesem bewirken kann. Auf diese Weise sehen Administratoren immer das Debugging, was ich für äußerst nützlich hielt. Vielen Dank für jede Hilfe wie immer!

20
Zach

Ich glaube nicht, dass es einen universellen URL-Hook gibt. Es gibt viele Haken und ich habe es vielleicht verpasst, aber ich glaube nicht, dass es einen gibt. Sie können durch die Haken bei adambrown.info schauen. Es gibt viele URL-Hooks, aber keine universellen.

Wenn ich eine andere Lösung vorschlagen kann: Protokollieren Sie die Fehler in einer Datei.

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

Dieser Code stammt direkt aus dem Codex für die Datei wp-config.php . Wenn Sie das tun, müssen Sie sich keine Sorgen machen, $_GET zu jonglieren oder herauszufinden, wer ein Administrator ist und wer nicht.

Bearbeiten:

Ich habe eine mögliche Lösung vergessen. Sie können dies mit Javascript tun. Ein kurzes Skript könnte Ihren Parameter an alle URLs auf der Seite anhängen, und Sie können das Skript ziemlich einfach nur für Administratoren laden.

Ich würde immer noch die "Protokoll" -Lösung vorschlagen, da Fehler für alle protokolliert werden. Wenn Ihre Leute wie ich sind und Fehlerberichte wie "hey, die Seite ist kaputt, wenn Sie dieses Formular ausfüllen" senden, werden Sie das Protokoll zu schätzen wissen. :)

18
s_ha_dum

Obwohl mein erster Ansatz für die Mülltonne war und die Antwort von s_ha_dums eine saubere und wahrscheinlich beste Lösung ist, möchte ich ein weiteres Arbeitsszenario anbieten:

Im Folgenden wird ein Cookie festgelegt, das für die nächsten 24 Stunden (86400 Sekunden) gültig ist, wenn sich ein Administrator beim System anmeldet. In wp-config.php wird die Konstante WP_DEBUG abhängig vom Vorhandensein und Wert des Cookies bedingt definiert.

Warnung: WP_DEBUG wird danach für alle Benutzer, die sich am selben Tag mit demselben Browser auf demselben Computer anmelden, auf true gesetzt.

in functions.php (oder als Plugin):

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

Siehe: Codex> Aktionsreferenz> wp_login

in wp-config.php :

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

Es beantwortet Ihre Frage nicht genau, aber aus persönlicher Erfahrung fand ich es besser, den Debug-Modus zu aktivieren, indem Sie die IP-Adresse anstelle der URL abgleichen.

Dies erfordert die Änderung von Links und löst das Identifizieren des Administrators, bevor WP die erforderliche Benutzerfunktionalität lädt.

3
Rarst

Dies ist auch ein möglicher Trick, aber Sie müssen ihn in Ihren wp-config.php einfügen, da dort WP_DEBUG definiert ist:

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

Fügen Sie der Seiten-URL, die Sie debuggen möchten, ?debugsecret=debugsecret hinzu.

1
prosti

Wenn Sie eine statische IP-Adresse haben, können Sie Folgendes tun:

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

Source: DEBUGGING WORDPRESS - VERWENDUNG VON WP_DEBUG AUF DER PRODUKTIONSSEITE

1
jpussacq