toscho.design

WordPress: Administrator mit PHP herausfinden

Will man bestimmte Inhalte – etwa bei der Fehlersuche – nur dem Administrator ausgeben, so möchte man zunächst nach der Funktion is_admin() greifen, die WordPress schon mitbringt. Die liefert aber nur dann TRUE zurück, wenn man eine Seite des Backends aufruft und hätte besser is_backend() geheißen …

Ich benutze einen Schnipsel, den ich aus dem WordPress-Forum gepult und in eine Funktion gegossen habe:

/**
 * Prüft, ob der Administrator die Seite ansieht.
 * @author »Kafkaesqui« <http://guff.szub.net/>
 * @see http://wordpress.org/support/topic/153260#post-681600
 * @return bool
 */
function is_boss()
{
    global $user_ID;
    if ( ! $user_ID or ! current_user_can('level_10') )
    {
        return FALSE;
    }
    return TRUE;
}

Level 10 hat nur der Adminstrator. Man kann diese Abfrage aber anpassen und auch die niederen Ränge mit speziellen Inhalten beglücken.
Lektüre: Roles and Capabilities.

6 Kommentare

  1. Klaus am 14.08.2009 · 06:56

    Moin Thomas,

    das kommt dann in die functions.php, nehm ich als PHP-Depp mal an.
    Obwohl, so ganz klar ist mir das mit der Fehlersuche in Verbindung mit dem Schnipsel noch nicht.

    Gruß
    Klaus

  2. Thomas Scholz am 14.08.2009 · 12:41

    @Klaus: Ja, die Funktion kann man sich in die functions.php packen.
    Meine Themes bestücke ich mit Klassen für eigene Templatefunktionen, Stringoperationen und anderen Werkzeugen. Mancher Code gerät mir recht komplex; daher setze ich gerne einen (prozeduralen) Timer an die potentiell problematischen Stellen:

    function timer($event = FALSE)
    {
    /* Aus: http://groups.google.com/group/de.comp.lang.php.misc/msg/c2a4c3fe764a7b86 
     * Anwendung:
     * Der Benchmark wird initiiert (auf 0 zurück gesetzt) durch 'timer();'
     * Nach jedem zu messenden Schritt muss timer('Beschreibung');
     * ausgeführt werden.
     * 'Beschreibung' kann eine Beschreibung des vorhergehenden Abschnittes
     * enthalten (darf nicht leer sein).
     * Am Schluss bekommt man mit 'echo timer();' die Statistik ausgegeben.
     * Dabei wird auch gleich der Timer auf 0 zurück gesetzt.
     * Die Ausgabe sieht in etwa so aus:
    Step: 0.0001 Total: 0.0001 [SYS: INIT]
    Step: 0.0016 Total: 0.0017 [SYS: Loading configurations]
    Step: 0.0088 Total: 0.0105 [SYS: Open MySQL connection]
     */
        static $first, $last, $out;
        $time = array_sum( explode(' ', microtime() ) );
        if ( !isset ( $first ) OR $event === false )
        {
            $first = $time;
        }
        if ( !$last OR $event === false )
        {
            $last = $time;
        }
        if ( $event === false )
        {
            return $out;
        }
        $out .= sprintf("Step:%8.4f Total:%8.4f [%s]\n",
                        ($time - $last),
                        ($time - $first),
                        $event);
        $last = $time;
    }

    Die Ausgabe dieses »Benchmarks für Arme« soll dann nur der Admin (ich) sehen:

    if ( XWP::is_boss() )
    {
        echo '<pre>' . timer() . '</pre>';
    }

    Das hilft mir dabei, langsamen Code zu entdecken und an den richtigen Stellen zu schrauben.

  3. Struppi am 19.08.2009 · 09:47

    Mal was ganz anderes.

    Warum kommt dein Feed bei mir eigentlich immer mit einer größen Verzögerung an? Egal ob als Bookmark oder aktuell mit Brief. Das Letzte was ich dort angezeigt bekomme, ist der Artikel mit den Mausgesten, diesen hier noch nicht (Der Feed wurde aktualisiert vor 14 Minuten).

  4. Thomas Scholz am 19.08.2009 · 09:59

    @Struppi: Keine Ahnung. Ich habe natürlich meinen eigenen Feed mit Opera abonniert, und da kommt er sofort.
    In Firefox sehe ich diesen Beitrag auch im Feed. Allerdings habe ich ihn darin erst jetzt abonniert; ein Cachingproblem kann ich also noch nicht ausschließen. Ich werde das mal verfolgen.

  5. Simon am 19.08.2009 · 21:58

    Danke für den Tipp. Werd ich bei Gelegenheit mal testen.

  6. _asterix_ am 09.10.2009 · 22:40

    Der Tipp mit dem Timer ist ausserdem auch sehr interessant. Performance ist ein sehr interessantes Thema für mich, wohl hauptsächlich deshalb, weil ich in diesem Bereich noch ein Unerfahrener bin.