Regisztrációs űrlap bővítése
Egyéni mezők a regisztrációs űrlapon, a profilszerkesztőben és az ügyfélszerkesztőben, erős jelszó, matematikai ellenőrzés, a blokkoló réteg stílusa és a felfüggesztett profil üzenete.
Ez a fejezet azt mutatja meg, hogyan bővítheted a regisztrációs folyamatot: egyéni mezőkkel, jelszóerősség-ellenőrzéssel, robotok elleni kérdéssel és stílusbeállításokkal. A kódos részek egyéni kódnak számítanak. Ha nem vagy otthon a fejlesztésben, kérd fejlesztő segítségét.
Egyéni mezők a regisztrációs és profilűrlapon
Szekció neve “Egyéni mezők a regisztrációs és profilűrlapon”Egyéni mezőt három helyre tehetsz:
- a regisztrációs űrlapra (
[register_form]), - a tagok által használt profilszerkesztőbe (
[rcp_profile_editor]), - az adminisztrációs Edit Customer (ügyfélszerkesztő) képernyőre.
Az összes kódot egy saját bővítménybe vagy a sablon functions.php fájljába kell tenni. A példában két szövegmező szerepel (rcp_profession és rcp_location), és mind az öt lépésben ugyanazokat az azonosítókat kell használni.
1. Mezők kiírása a regisztrációs és a profilűrlapon
Szekció neve “1. Mezők kiírása a regisztrációs és a profilűrlapon”A regisztrációs űrlapra a rcp_after_password_registration_field, a profilszerkesztőbe a rcp_profile_editor_after művelet kapcsolódik. Más műveletekkel a mező helyét is megváltoztathatod.
function pelda_rcp_mezok_kiirasa() { $foglalkozas = get_user_meta( get_current_user_id(), 'rcp_profession', true ); $helyszin = get_user_meta( get_current_user_id(), 'rcp_location', true ); ?> <p> <label for="rcp_profession"><?php _e( 'Foglalkozásod', 'rcp' ); ?></label> <input name="rcp_profession" id="rcp_profession" type="text" value="<?php echo esc_attr( $foglalkozas ); ?>"/> </p> <p> <label for="rcp_location"><?php _e( 'Városod', 'rcp' ); ?></label> <input name="rcp_location" id="rcp_location" type="text" value="<?php echo esc_attr( $helyszin ); ?>"/> </p> <?php}add_action( 'rcp_after_password_registration_field', 'pelda_rcp_mezok_kiirasa' );add_action( 'rcp_profile_editor_after', 'pelda_rcp_mezok_kiirasa' );Más mezőre így alakítsd át:
- Az
rcp_professionés azrcp_locationazonosítót cseréld a sajátodra, szóköz nélkül, alulvonással. Ugyanazt kell átírni aget_user_meta()hívásban, a címkeforattribútumában, a beviteli mezőnameésidattribútumában. - A
$foglalkozasés$helyszinváltozók nevét igazítsd a mezőkhöz. - Írd át a címkék szövegét.
2. Mezők az ügyfélszerkesztő képernyőn
Szekció neve “2. Mezők az ügyfélszerkesztő képernyőn”Ahhoz, hogy az adminisztrátor is szerkeszthesse az új adatokat (ahogy a nevet vagy az e-mail-címet), a mezőket az RCP Edit Customer képernyőjére is fel kell venni. A kód majdnem ugyanaz, két különbséggel: a művelet neve rcp_edit_member_after, és a mezőt táblázatsorba kell tenni. A felhasználó azonosítóját a függvény paraméterként kapja.
function pelda_rcp_ugyfel_mezok( $user_id = 0 ) { $foglalkozas = get_user_meta( $user_id, 'rcp_profession', true ); $helyszin = get_user_meta( $user_id, 'rcp_location', true ); ?> <tr valign="top"> <th scope="row" valign="top"><label for="rcp_profession"><?php _e( 'Foglalkozás', 'rcp' ); ?></label></th> <td> <input name="rcp_profession" id="rcp_profession" type="text" value="<?php echo esc_attr( $foglalkozas ); ?>"/> <p class="description"><?php _e( 'A tag foglalkozása', 'rcp' ); ?></p> </td> </tr> <tr valign="top"> <th scope="row" valign="top"><label for="rcp_location"><?php _e( 'Város', 'rcp' ); ?></label></th> <td> <input name="rcp_location" id="rcp_location" type="text" value="<?php echo esc_attr( $helyszin ); ?>"/> <p class="description"><?php _e( 'A tag városa', 'rcp' ); ?></p> </td> </tr> <?php}add_action( 'rcp_edit_member_after', 'pelda_rcp_ugyfel_mezok' );3. Hibaellenőrzés regisztrációkor (nem kötelező)
Szekció neve “3. Hibaellenőrzés regisztrációkor (nem kötelező)”Ha kötelezővé akarod tenni a mezőket, kapcsolódj az rcp_form_errors művelethez. Ha a mező üres, az rcp_errors()->add() hibát vesz fel, és az RCP addig nem engedi elküldeni az űrlapot, amíg minden ellenőrzés át nem megy. Ha a mező nem kötelező, ezt a lépést hagyd ki. Más típusú adatnál (például telefonszám) a formátumot is ellenőrizheted.
function pelda_rcp_mezok_ellenorzese( $posted ) { if ( is_user_logged_in() ) { return; } if ( empty( $posted['rcp_profession'] ) ) { rcp_errors()->add( 'invalid_profession', __( 'Add meg a foglalkozásodat', 'rcp' ), 'register' ); } if ( empty( $posted['rcp_location'] ) ) { rcp_errors()->add( 'invalid_location', __( 'Add meg a városodat', 'rcp' ), 'register' ); }}add_action( 'rcp_form_errors', 'pelda_rcp_mezok_ellenorzese', 10 );4. Mentés regisztrációkor
Szekció neve “4. Mentés regisztrációkor”Az ellenőrzés után az adatokat a felhasználó metaadatai közé kell menteni az rcp_form_processing művelettel és az update_user_meta() függvénnyel. Az itt megadott azonosítóknak pontosan egyezniük kell a get_user_meta() hívásokban használtakkal.
function pelda_rcp_mezok_mentese_regisztraciokor( $posted, $user_id ) { if ( ! empty( $posted['rcp_profession'] ) ) { update_user_meta( $user_id, 'rcp_profession', sanitize_text_field( $posted['rcp_profession'] ) ); } if ( ! empty( $posted['rcp_location'] ) ) { update_user_meta( $user_id, 'rcp_location', sanitize_text_field( $posted['rcp_location'] ) ); }}add_action( 'rcp_form_processing', 'pelda_rcp_mezok_mentese_regisztraciokor', 10, 2 );5. Mentés profil- és ügyfélszerkesztéskor
Szekció neve “5. Mentés profil- és ügyfélszerkesztéskor”A profilszerkesztő mentésekor az rcp_user_profile_updated, az ügyfélszerkesztő mentésekor az rcp_edit_member művelet fut le. Mindkettő a felhasználó azonosítóját kapja, a többi ugyanaz. Ha azt akarod, hogy a tagok üres értéket is menthessenek (törölhessék a mezőt), a függvény kezelje az üres bemenetet is.
function pelda_rcp_mezok_mentese_profilnal( $user_id ) { if ( ! empty( $_POST['rcp_profession'] ) ) { update_user_meta( $user_id, 'rcp_profession', sanitize_text_field( $_POST['rcp_profession'] ) ); } if ( ! empty( $_POST['rcp_location'] ) ) { update_user_meta( $user_id, 'rcp_location', sanitize_text_field( $_POST['rcp_location'] ) ); }}add_action( 'rcp_user_profile_updated', 'pelda_rcp_mezok_mentese_profilnal', 10 );add_action( 'rcp_edit_member', 'pelda_rcp_mezok_mentese_profilnal', 10 );Tippek az átalakításhoz
Szekció neve “Tippek az átalakításhoz”- A mezőket elsősorban a
nameés azidazonosítja. Ha a „foglalkozás” helyett „munka” kell, keresd meg azrcp_professionelőfordulásait, és cseréldrcp_munka-ra, vagy vegyél fel egy második mezőpárt. - A beküldött adatot mindig ellenőrizd, hogy a várt formátumú-e.
- Újabb mezőnél ne a függvényeket másold, hanem a függvényeken belüli kódot.
Más mezőtípusok
Szekció neve “Más mezőtípusok”A szövegmező mellett más típus is használható. Minden típusnál mind az öt lépést át kell alakítani: a kiírást, az ellenőrzést és a mentést is.
| Típus | Amire figyelni kell |
|---|---|
| Jelölőnégyzet (checkbox) | A kiírásnál checked() jelöli az állapotot. Kötelező jelölésnél az isset() ellenőrzi, hogy a mező megjött-e. Mentéskor az érték true, ha be volt pipálva. Az ügyfélszerkesztőben a címke mellé leírás kerül. |
A beviteli mező típusa email. Regisztrációkor az is_email() ellenőrzi a formátumot, mentés előtt a sanitize_email() tisztítja az értéket. |
|
| Rádiógomb (radio) | Azonos nevű radio bemenetek, a kiválasztottat a checked() jelöli. Mentés előtt ellenőrizd, hogy a beküldött érték az engedélyezett választások között van-e (in_array()). |
| Több jelölőnégyzet (multi-check) | Tömbként küldött értékek (name="mezo[]"). A kiírásnál a checked() az in_array() eredményét kapja, mentés előtt a tömb minden elemét tisztítani kell (array_map() és sanitize_text_field). |
| Legördülő menü (select) | A kiválasztott option a selected() jelölést kapja. Mentés előtt az engedélyezett választások listájával kell összevetni az értéket. |
| Szövegterület (textarea) | A kiírásnál az esc_textarea() védi az értéket. A példában mentés előtt a wp_filter_nohtml_kses() eltávolít minden HTML-t. Ha engedni akarsz némi HTML-t, használd helyette a wp_kses() függvényt. |
| Webcím (URL) | A bemenet típusa url. Mentés előtt az esc_url_raw() tisztítja az értéket. |
Erős jelszó kikényszerítése (Enforce Strong Passwords)
Szekció neve “Erős jelszó kikényszerítése (Enforce Strong Passwords)”Az Enforce Strong Passwords kiegészítő regisztrációkor megköveteli az erős jelszót, így biztonságosabbak az ügyfélfiókok. A kiegészítőnek nincs beállítása: bekapcsolás után magától működik. Működéséhez az RCP kell.
- Ahogy a felhasználó beírja a jelszót, egy erősségmérő jelzi, mennyire erős.
- Ha gyenge jelszóval próbálja elküldeni az űrlapot, a „Please use a strong password” üzenetet kapja, és tippeket arra, mit kell teljesítenie.
- Erős jelszó megadása után a regisztráció befejezhető.
Matematikai ellenőrzés (Math Verification)
Szekció neve “Matematikai ellenőrzés (Math Verification)”A Math Verification kiegészítő egy egyszerű számtani feladatot tesz a regisztrációs űrlapra, hogy a robotok ne tudjanak kéretlen fiókokat létrehozni. Bekapcsolás után a regisztrációs oldalon megjelenik a feladat és egy mező a válasznak. A feladat mellett látható címkét a Restrict → Settings → Misc fülön lehet átírni.
A blokkoló réteg stílusának átalakítása
Szekció neve “A blokkoló réteg stílusának átalakítása”Az RCP a jQuery BlockUI segítségével zárolja a regisztrációs űrlapot, amikor dolgozik rajta (például végösszeget számol vagy a fizetési mezőket cseréli). Ezt a réteget a bővítmény színnel, átlátszósággal és szegéllyel stílusozza. Mivel a stílusokat a script közvetlenül az elemre írja, az átírásukhoz !important kell. A saját szabályokat a Megjelenés → Testreszabás → További CSS területen add meg.
Példa: kék szín, félig átlátszó réteg és árnyék:
.blockUI.blockOverlay { background-color: #0088d0 !important; opacity: 0.5 !important; box-shadow: 0 0 10px 1px #000 !important;}A felfüggesztett profil üzenetének módosítása (RCP Ultimate Member)
Szekció neve “A felfüggesztett profil üzenetének módosítása (RCP Ultimate Member)”Ha az Ultimate Member és az RCP együtt fut, a lejárt tagság profilján egy üzenet látszik. Ezt az rcpum_expired_member_message szűrővel írhatod át. A példában a sajátodat megnézők „Your account is expired!” (a te fiókod lejárt), mások „This account is expired.” szöveget látnak:
function pelda_lejart_uzenet( $message ) { $uj_uzenet = __( 'Ez a fiók lejárt.', 'rcp-ultimate-member' ); if ( um_is_myprofile() ) { $uj_uzenet = __( 'A fiókod lejárt!', 'rcp-ultimate-member' ); } return sprintf( '<p>%s</p>', $uj_uzenet );}add_filter( 'rcpum_expired_member_message', 'pelda_lejart_uzenet' );A jelszó megerősítő mező eltávolítása
Szekció neve “A jelszó megerősítő mező eltávolítása”Alapból a regisztrációs űrlapon két jelszómező van: Password és Password again. Ha azt szeretnéd, hogy a tagnak elég egyszer megadnia a jelszavát, két lépés kell. Ez egyedi kód, ezért ellenőrizd tesztoldalon.
- Rejtsd el a második mezőt. Add hozzá a Megjelenés → Testreszabás → További CSS területhez:
#rcp_password_again_wrap { display: none;}- Töröld a „Passwords do not match” hibát. A mező elrejtése nem elég, mert az RCP továbbra is várja a második jelszót, és eltérés miatt hibát dob. Tedd a kódot a gyermektéma
functions.phpfájljába vagy egy saját bővítménybe:
function pelda_rcp_jelszo_egyezes_hiba_torlese( $posted ) { rcp_errors()->remove( 'password_mismatch' );}add_action( 'rcp_form_errors', 'pelda_rcp_jelszo_egyezes_hiba_torlese' );A vezetéknév és a keresztnév kötelezővé tétele
Szekció neve “A vezetéknév és a keresztnév kötelezővé tétele”A regisztrációs űrlapon van First Name és Last Name mező, de alapból egyik sem kötelező. A következő kód kötelezővé teszi őket a regisztrációnál és a profil szerkesztésénél is, és hibaüzenetet ad, ha üresen maradnak. Tedd a gyermektéma functions.php fájljába vagy egy saját bővítménybe:
// Regisztrációfunction pelda_rcp_nevek_kotelezo( $posted ) { if ( empty( $posted['rcp_user_first'] ) ) { rcp_errors()->add( 'first_name_required', __( 'Kérjük, add meg a keresztneved', 'rcp' ), 'register' ); } if ( empty( $posted['rcp_user_last'] ) ) { rcp_errors()->add( 'last_name_required', __( 'Kérjük, add meg a vezetékneved', 'rcp' ), 'register' ); }}add_action( 'rcp_form_errors', 'pelda_rcp_nevek_kotelezo' );
// Profil szerkesztésefunction pelda_rcp_nevek_kotelezo_profil( $posted, $user_id ) { if ( empty( $posted['rcp_first_name'] ) ) { rcp_errors()->add( 'first_name_required', __( 'Kérjük, add meg a keresztneved', 'rcp' ) ); } if ( empty( $posted['rcp_last_name'] ) ) { rcp_errors()->add( 'last_name_required', __( 'Kérjük, add meg a vezetékneved', 'rcp' ) ); }}add_action( 'rcp_edit_profile_form_errors', 'pelda_rcp_nevek_kotelezo_profil', 10, 2 );A fenti kódok útmutatásnak szólnak: egyedi fejlesztésnek számítanak, a módosításuk és hibakeresésük a te feladatod.
Készült: