Tovább a tartalomhoz

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 az rcp_location azonosítót cseréld a sajátodra, szóköz nélkül, alulvonással. Ugyanazt kell átírni a get_user_meta() hívásban, a címke for attribútumában, a beviteli mező name és id attribútumában.
  • A $foglalkozas és $helyszin vá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 );

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 );
  • A mezőket elsősorban a name és az id azonosítja. Ha a „foglalkozás” helyett „munka” kell, keresd meg az rcp_profession előfordulásait, és cseréld rcp_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.

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.
E-mail 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.

  1. 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;
}
  1. 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.php fá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ése
function 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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások