Role während Registrierung abfragen

  • Ich würde gerne während der Registrierung den neuen Usern die Möglichkeit geben, aus einem Drop-Down die Role auszuwählen, die sie innehaben wollen. (u.a. selber definierte Rollen)

    Ich habe dazu auch ein plugin gefunden: WP Roles at Registration

    Leider funktioniert das nicht zu 100% und der Programmierer reagiert auch nicht. Ich bin nicht so der Spezialist, aber ich habe versucht zu verstehen was falsch läuft. Vielleicht kann mir ja hier einer helfen.

    Beim Aufruf des Registrierungsformulars wird das Pulldown zwar angezeigt und auch die Optionen werden geladen. Leider werden abere die Labels der Optionen nicht angezeigt. Das Droppdown hat also Optionen aber die sind alle nur weiß.

    Im Script steht:

    <label for="wp_rar_user_role"><?= $this->wp_rar_role_label ?></label>
    <select id="wp_rar_user_role" name="wp_rar_user_role" class="input select">
    <?php
    foreach($this->wp_selected_rar_roles as $role) {
    ?>
    <option value="<?= $role ?>"<?= ($selected_role == $role) ? ' selected="selected"' : '' ?>>
    <?= $wp_roles->roles[$role]['name'] ?>
    </option>
    <?php
    }
    ?>
    </select>

    Im Quellcode sieht das dann so aus:

    <p>
    <label for="wp_rar_user_role">Roles<br />
    <select id="wp_rar_user_role" name="wp_rar_user_role" class="input select">
    <option value="contributor">
    </option>
    <option value="subscriber">
    </option>
    <option value="role2">
    </option>
    <option value="role3" selected="selected">
    </option>
    </select>
    </label>
    </p>

    Kann mir jemand sagen was ich da fixen muss, damit das funktioniert?

    Vielen Dank

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • $wp_roles->roles[$role]['name'] ist dann offenbar leer: Bau doch vor diesen Blog mal das hier ein und schaue, was das ergibt:

    PHP
    error_log('$wp_roles: ' . print_r($wp_roles, true)); // TODO remove

    Dann kannst Du das anhand der Ausgabe des wp_roles-Objektes hoffentlich so anpassen, dass es funktioniert.

    Einmal editiert, zuletzt von Ammaletu (7. Februar 2011 um 18:35)

  • Ach verdammt, jetzt fange ich auch schon so an. "Block" meinte ich, sprich vor dem Code-Stück, das Du oben zitiert hast. Und die Code-Auszeichnung hatte ich in meiner Antwort auch vergessen, und dabei wollte ich Dich gerade bitten, das in Zukunft bitte zu machen (die drei Buttons unten rechts im Editor). Erhöht die Lesbarkeit der Beiträge enorm. ;-)

    error_log schreibt das einfach in das Logfile, in dem PHP-Fehler normalerweise landen. Das muss dafür natürlich konfiguriert sein, sollte es aber sowieso sein. Ansonsten wird das möglicherweise am Bildschirm ausgegeben. Falls das nicht klappt oder Du das nicht an einer Testinstanz ausprobierst sondern an der Liveseite, dann vielleicht besser so und hinterher wieder rausnehmen:

    PHP
    <!-- <?php print_r($wp_roles); ?> -->
  • Das habe ich nun so gemacht ... aber es ändert sich nix ... oder habe ich das falsch verstanden?

    <p>
    <?php print_r($wp_roles); ?>
    <label for="wp_rar_user_role"><?= $this->wp_rar_role_label ?><br />
    <select id="wp_rar_user_role" name="wp_rar_user_role" class="input select">
    <?php
    foreach($this->wp_selected_rar_roles as $role) {
    ?>
    <option value="<?= $role ?>"<?= ($selected_role == $role) ? ' selected="selected"' : '' ?>>
    <?= $wp_roles->roles[$role]['name'] ?>
    </option>
    <?php
    }
    ?>
    </select>
    </label>
    </p>

    Die Labels gibt es ja, im admin sehe ich sie ja ... die frage ist vermutlich einfach ... wie werden sie korrekt aufgerufen???

    Einmal editiert, zuletzt von protimo (8. Februar 2011 um 09:09)

  • Was soll sich da auch ändern, print_r gibt einfach nur dieses Objekt aus. Du musst nun mal in den Quelltext der betroffenen Seite schauen, wie wp_roles aufgebaut ist. Dann solltest Du sehen können, wieso der Aufruf im Plugin nicht funktioniert. Und hinterher den Code wieder entfernen. Muss ja nicht jeder wissen, was es für Rollen in Deinem Blog gibt.

  • So, nun habe ich dieses Plugin doch mal lokal ausprobiert. Reparieren musste ich folgendes:

    "<?= " ersetzen durch "<?php print "

    Sowie einmal ein einzelnes "<?" durch "<?php". Dann ging das Plugin ohne Probleme und bietet mir bei der Registrierung nun die Rolle "Subscriber" an. Die Übersetzung klappt also nicht, aber ansonsten geht es. wp_roles kann man sich auch ausgeben lassen -- ich wüsste nicht, wieso das bei Dir nicht gehen soll.

  • Tja, ich weiß nicht so genau was ich dazu noch schreiben soll. Hast Du eine lokale Testinstanz, wo Du etwas rumprobieren kannst? (XAMPP, siehe FAQ). Das macht sich am besten, ohne die Liveseite zu stören.

    Also um das noch mal zusammenzufassen, folgendes klappt bei mir:

    • WP 3.0.x
    • Theme TwentyTen auswählen
    • alle anderen Plugins abschalten (falls diese irgendwas an den Rollen manipulieren)
    • Im RaR-Plugin <?= durch <?php print ersetzen und das einzelne <? durch <?php. Das sind die veralteten Kurzversionen der PHP-Tags, bei mir beschwert sich da der Compiler. Wenn es bei Dir ohne die Änderungen geht, um so besser.


    Wenn das so geht, kannst Du dann schauen, mit welchen Plugins oder Themes es nicht funktioniert und wieso.

    P.S.: Thema sinnlos x-mal nach oben pushen führt in der Regel dazu, dass Du ignoriert wirst. Leute, die hier in ihrer Freizeit helfen, finden das meistens nicht witzig. Das heißt ja irgendwie, dass Du Dein Problem wichtiger findest als die Probleme der anderen Nutzer, aber trotzdem nicht gewillt bist, weitere Infos zu liefern...

  • ich bin dabei einen neuen blog aufzusetzen, deshalb kann ich da rumprobieren. ich habe

    - sämtliche plugins ausgeschaltet
    - das theme auf Twenty Ten 1.1 zurückgesetzt
    - die fixes im code gemacht, wie du gesagt hast

    aber leider ist der effekt gleich null.

    ich habe jetzt etwas anderes probiert und bin nun noch mehr verwirrt.

    wenn ich im admin eingeloggt bin und dann ../wp-login.php?action=register im gleichen browser aufrufe ist das pulldown so wie es sein sollte und die Roles werden angezeigt. wenn ich aber aus dem admin ausgeloggt bin und dann ../wp-login.php?action=register aufrufe ist das pulldown wieder blank.

    jemand eine idee?

    Einmal editiert, zuletzt von protimo (9. Februar 2011 um 19:01)

  • Witzig, da hast Du Recht. Ich hab es natürlich auch eingeloggt getestet. Ok, es sieht dann wohl so aus als würde $wp_roles uneingeloggt nicht zur Verfügung stehen. Was das Plugin dann für eine Daseins-Berechtigung hat, ist mir nicht klar, das kann ja so nicht funktionieren. Wurde das kürzlich geändert oder hat der Autor das echt gar nicht getestet?!?

    Hm, hattest Du den Autor deswegen mal gefragt? Das wäre ja nun eigentlich an ihm, das zu beheben. ... Ok, interessiert mich doch, also hab ich mal etwas geschaut, wie WP denn die Rollennamen übersetzt. Folgendes funktioniert, ist aber möglicherweise nicht die effektivste Lösung. Aber gut, die Registrierung schauen sich ja auch nicht jeden Tag tausend Leute an, also sollte das so gehen.

    Einfach Zeile 183 durch das hier ersetzen:

    PHP
    <?php print translate_user_role(ucfirst($role)); ?>
  • Zitat

    warum sagst du das mit bedenken?
    wo ist bei deiner lösung das problem?

    Weil ich das zwischendurch mal schnell zusammengehackt habe. Keine Ahnung wie gesagt ob das die beste Lösung ist. Da es funktioniert ist es aber schon mal besser als der jetzige Zustand des Plugins. ;-)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!