publikacja: 17 listopada 2009, autor: , komentarzy 11 https://wpninja.pl/artykuly/tworzymy-dodatkowe-pole-w-profilu-uzytkownika/

Tworzymy dodatkowe pole w profilu użytkownika

Tworzymy dodatkowe pole w profilu użytkownika

Jeden z czytelników WPNinja zadał pytanie:

Mam na portalu kilku autorów. Chciałbym wstawić do sidebara link do profilu danego autora na forum (które jest w subdomenie, oparte na SMF). Np autor X ma profil forum.domena.pl/X; autor Y, ma profil forum.domena.pl/Y itd. Jak mogę to zrobić?

Stwierdziłem, iż najłatwiej będzie stworzyć pole użytkownika – jednak nie takie przy wpisie, a takie przy profilu.

Załóżmy więc, iż każdemu z naszych autorów chcemy dać możliwość odpowiedzi na pytanie „jaki jest Twój ulubiony kolor”, chcąc przedstawić tę odpowiedź pod wpisem danego autora.

Trzeba nam będzie więc podjąć dwa kroki:

  • stworzyć własną wtyczkę z rzędem odpowiednich funkcji,
  • wstawić mały kod do pliku single.php.

Zaczynajmy więc!

Tworzymy wtyczkę

Pisanie wtyczki zaczyna się od stworzenia odpowiedniego pliku w folderze wp-content/plugins – plik nazwijmy „kolory.php”. Otwieramy go edytorem PHP i wstawiamy kod:

<?php
/*
Plugin Name: Kolory autora
Plugin URI: https://wpninja.pl
Description: Aby inwigilować autorów...
Author: Nathan
Version: 0.0.1
Author URI: http://usarzewicz.org
*/

Tak oto stworzyliśmy swoją własną wtyczkę do WordPressa – wtyczka działa, wyświetlana jest w panelu zarządzania wtyczkami, póki co jeszcze jednak nic nie robi. Aby zaczęła coś robić, musimy wstawić trzy funkcje.

Nasza wtyczka widoczna na ekranie wtyczek

Nasza wtyczka widoczna na ekranie wtyczek

Wstawiamy formularz do profilu użytkownika

Oto kolejne linijki kodu.

// Wstawiamy formularz
function kolory_formularz() // otwieramy funkcję
{
global $wpdb, $user_ID; // przypisujemy zmienne globalne
$kolory_odpowiedz = get_usermeta($user_ID,'kolory_odpowiedz',TRUE); // wyciągamy z bazy odpowiedź, jeśli użytkownik wcześniej jej udzielił
 
?>
<h3>Odpowiedz na poniższe pytanie</h3>
 
<table>
<tr>
<th><label for="kolory_odpowiedz">Jaki jest Twój ulubiony kolor</label></th>
<td><input type="text" name="kolory_odpowiedz" id="kolory_odpowiedz" value="<?php echo $kolory_odpowiedz; ?>" /></td>
</tr>
</table>
 
<?php
}

Powyższy kod wstawi nam do profilu użytkownika WordPressa dodatkowe pole tekstowe na samym dole, w którym będzie można udzielić odpowiedzi. Formularz ten jednak jeszcze się nie pokaże, bowiem brakuje ważnego fragmentu kodu, toteż nie odświeżajcie jeszcze strony ;).

Zapisujemy formularz

Teraz musimy zapisać odpowiedź, której udzielimy w nowym polu. Dane z profilu są już zapisywane przez gotowy skrypt wbudowany w WordPressa, który zapisuje standardowe pola użytkownika, naszym zadaniem jest się pod ten skrypt podpiąć poprzez akcję. Dokonamy tego już za chwilę, najpierw jednak utworzymy nową funkcję:

// Zapisujemy ustawienia
function kolory_formularz_zapisz()
{
global $wpdb, $user_ID; // ponownie wyciągamy zmienne globalne
 
if (preg_match('&profile.php&', $_SERVER['REQUEST_URI'])) {
$id = $user_ID;
}
elseif($_GET['user_id']) {
$id = $_GET['user_id'];
} // wyciągamy ID użytkownika
 
if($_POST['kolory_odpowiedz']) { update_usermeta($id ,'kolory_odpowiedz', $_POST['kolory_odpowiedz']);  } else { update_usermeta($id, 'kolory_odpowiedz', ''); } // ta linia zapisuje naszą odpowiedź
}

Ta oto funkcja zapisze odpowiedź na pytanie o kolor.

Wyciągamy odpowiedź z bazy i szlifujemy całość

Potrzebujemy jeszcze jednej funkcji.

// Wyciagamy odpowiedz z bazy
function kolory_odpowiedz($id = "")
{
global $wpdb, $user_ID;
$kolory_odpowiedz = get_usermeta($user_ID,'kolory_odpowiedz',TRUE);
return $kolory_odpowiedz;
}

Funkcja kolory_odpowiedz() za chwilę zostanie użyta to wyciągnięcia z bazy danych odpowiedzi. Ostatnie dwie linie kodu, które musimy wpisać to:

add_action('show_user_profile', 'kolory_formularz');
add_action('profile_update', 'kolory_formularz_zapisz');
 
?>

Pierwsza z tych linii wyświetli formularz w panelu użytkownika, druga zaś podepnie funkcję zapisywania odpowiedzi pod wbudowany skrypt WordPressa. Oczywiście na końcu zamykamy tag PHP i tym sposobem napisaliśmy wtyczkę.

Dodatkowe pole widoczne w profilu

Dodatkowe pole widoczne w profilu

Wyświetlamy dane na stronie wpisu

Teraz pozostaje nam otworzyć plik single.php i w zasięgu pętli (the_loop()) wyświetlić odpowiedź autora na nasze pytanie. Wybieramy miejsce, które nas interesuje i wstawiamy kod:

<?php if ( kolory_odpowiedz(get_the_author_id()) != null ) : ?>Ulubiony kolor autora to: <strong><?php echo kolory_odpowiedz(get_the_author_id()); ?></strong><?php endif; ?>

I tym sposobem wszystko działa tak, jak trzeba. Funkcja get_the_author_id() wyciąga z bazy ID autora, które jest przekazywane do naszych funkcji we wtyczce, które dalej wyciągają odpowiednią wartość z bazy danych, w tym przypadku odpowiedź na pytanie o kolor ;). Jeśli zaś autor odpowiedzi nie podał i pole jest puste, nic nie zostanie wyświetlone.

Odpowiedź widoczna przy wpisie

Odpowiedź widoczna przy wpisie

Podsumowanie

Dzięki powyższej wiedzy bez problemu będziecie mogli stworzyć własne pola użytkownika, dzięki którym wyświetlicie np. linki do Blipa, Flakera czy Twittera, czy całej masy innych serwisów, a przecież nie muszą to być koniecznie linki.

Jeśli poradnik wam się spodobał, wesprzyjcie studenta dotacją, bo Wrocław drogie miasto, a studia jeszcze droższe :).

Dodaj własny komentarz