Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Registrační proces
Štítky: Registrace
Zvolené téma obsahuje celkem 4 odpovědi. Do diskuze (2 účastníci) se naposledy zapojil uživatel Clant a poslední změna je stará 13 let, 1 měsíc.
-
AutorPříspěvky
-
17. února 2011 (15:36) #871
Zdravim komunitu, mam menší dotaz. Potřebuju si upravit registrační formulář pro svoje účely (potřebuji zjistit jednu hodnotu, kterou napíše uživatel do formu, jestly se nachází v databázi nebo ne).
Když koukám na souboru wp-signup.php, tak mam problémy se v tom celym vyznat. Mohl by mi poradit někdo, kdo se v tomhle vyzná? Respektivě bych potřeboval vědět, jak jdou ty postupy po sobě, protože WP několikrát ověřuje data, pak uživatele a všechno jinou funkcí, takže nevim kde je začátek toho registračního procesu.
Používám WP 3.0.4 s rozšířením MU (defaultní rozšíření od 3.0.0) a potřebuju při registraci, aby si svůj blog mohl vytvořit jen uživatel, který napíše určitý kód do formu. Bohužel nevim do jaký funkce to vložit neboť nevidim žádnou souvislost souboru wp-signup.php, všechno je tam na přeskáčku..
20. února 2011 (19:23) #7866Soubor wp-signup.php je dobrým začátkem, ale lepší je rovnou naplno využít standardních možností WordPress API. A je tu také mnohem jednodušší varianta – použít jeden z mnoha pluginů.
Zkusím jen stručně popsat jednoduchý postup k tvorbě vlatního řešení. Nejdříve je třeba využít akce register_form, kde pomocí vlastní funkce nadefinujete zobrazené pole pro vložení požadované hodnoty. U víceuživatelské verze WordPressu (MU) budete muset ještě použít akci signup_header pro přesměrování na jednotlivé weby. Dále musíme pomocí akce register_post vyplněné hodnoty ověřit. Tedy porovnat buď přímo jako součást funkce nebo se dotázat do databáze. A nakonec je třeba ještě pomocí akce user_register uložit dodatečné vyplněné údaje do databáze (v našem případě to asi nebude potřeba, protože pouze něco kontrolujeme). Začal bych to asi dělat pro normální WordPress a pak to rozšířit na víceuživatelskou verzi, což je sice trochu komplikace, ale měla by být řešitelná.
Vše složené společně pak najdete např. v této ukázce. Budete se muset asi trochu učit a experimentovat, ale není to nic extra složitého…
A je tu také ještě mnohem jednodušší cesta v podobě dostupných pluginů. Nemusí asi úplně vyhovovat, ale některé umí vkládat i pole s tzv. “invitation code”, což je víceméně požadovaná funkcionalita znalosti nějakého kódu pro registraci. Vcelku známé jsou následující pluginy (nezkoušel jsem ale funkčnost na víceuživatelské verzi WordPressu):
Register Plus Redux – umí právě i invitations, viz Screenshoty.
Simplr User Registration Form – trochu specifický plugin, umí trochu i něco jiného – různé registrační formuláře na různých místech webu a pro různé uživatele.
Budeme rádi, pokud se podělíte s výsledky vašeho zkoumání a doporučíte nejlepší postup…
21. února 2011 (18:14) #7867Tak jsem to nakonec upravil jinak – a to zasáhem přímo do kódu WordPressu. Pokusím se to nějak sepsat do bodů a napsat sem moje řešení.
1) Vytvoření formů v souboru wp-signup.php
<?php //
ZADAVANI RODNEHO CISLA
?><br />
<label for="user_email_sas"><?php _e( 'Rodné číslo :' ) ?></label><br />
<?php if ( $errmsg = $errors->get_error_message('user_rc') ) { ?><br />
<p class="error"><?php echo $errmsg ?></p><br />
<?php } ?><br />
<input name="user_rc" type="text" id="user_rc" value="<?php echo esc_attr($user_rc) ?>" maxlength="200" /><br /><?php _e('Pouze v případě, že jsteXXX.') ?><br />— umístění formů si vyberu sám, kde potřebuji. Všechny informace o úvodních formech začínají na řádcích 129 (function show_user_form) —
2) Úprava v souboru ms-functions, který definuje funkce využité při registraci uživatelů/blogu na WordPress MU
if ($_POST['signup_for'] == 'blog') { // Pokud uživatel vybere možnost "chci blog"<br />
if ($_POST['user_rc'] == '') { // pokud jsou pole prázdná, vypíše se chyba<br />
$errors->add('user_rc', 'Blog může mít pouze XXX!');</p>
<p> }<br />
if (strlen($_POST['user_rc']) > 10){ // kontrola délky rodného čísla<br />
$errors->add('user_rc', 'Neplatné rodné číslo!');<br />
}</p>
<p> if (!is_numeric($_POST['user_rc'])){ // kontrola, zda rodné číslo je numerické<br />
$errors->add('user_rc', 'Nejsou cisla!');<br />
}</p>
<p> if (!checkIn($_POST['user_rc'])) { // porovnání údají s databází<br />
$errors->add('user_rc', 'Zadané údaje neodpovídají databázi!');<br />
}<br />— Na konec funkce wpmu_validate_user_signup($user_name, $user_email) si přidám moje podmínky, které se budou kontrolovat
Za konec funkce umístim mojí funkci checkIn
function checkInSas($userRc) {<br />
global $wpdb;</p>
<p> $otisk = xxx; // vyberu si, čemu se bude rovnat otisk</p>
<p> $zzz = $wpdb->query( $wpdb->prepare("SELECT * FROM xxx WHERE yyy = %s", $otisk) );<br />
if ( $zzz != null ){<br />
return true;<br />
}else{<br />
return false;<br />
}<br />
}<br />— funkci jsem upravil zhruba jak by měla vypadat, každý si zajisté doplní podle svého
Snad to bude někomu užitečné :-)
22. února 2011 (11:16) #7868Díky za reakci, ale toto řešení mi bohužel nepřijde vhodné…
Zatím jsem to detailně nezkoumal, ale upravuješ dva důležité soubory jádra a až přijde čas automatické aktualizace, tak je budeš muset pokaždé ještě ručně nahradit, nehledě na to, že budeš muset pravidelně sledovat jejich vývoj, zda u nich nedosšlo k nějaké změně (= budeš muset svoje úpravy znovu vkládat do aktuálních souborů, alespoň u velkých verzí).
Proto bych spíše doporučil výše popsané řešení s využitím WordPress API, které je na aktualizacích zcela nezávislé.
A ještě jsem zcela nepochopil logiku zjišťování? Myslel jsem, že uživatelé musí znát jedno heslo a poté si mohou založit na webu svůj blog. Ale podle uvedeného kódu zjišťujete rodné číslo? Takže to už tam musí mít někdo v systému zadáno? Zkus to trochu upřesnit…
22. února 2011 (16:22) #7869Jojo, s tim jsem nějak počítal, že když přijde aktualizace, tak to budu muset manuálně doplnit.
Jinak, abych to upřesnil, můj kód se stará o kontrolu RC jestli je v databázi, když je, tak si uživatel může vytvořit blog, když tam neni, tak může pouze uživatele. Snad jsem to vysvětlil :-)
ad: Pokud by šlo jenom o heslo, tak místo těch podmínek na rodný číslo, by se dala pouze podmínka if ( heslo == “franta” ) a je to, to si myslim, že by si každý dokázal udělat podle sebe, přece jenom, určitě do kódu nešmátrá žádný laik.
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.