WordPress - motywy, wtyczki, informacje, programowanie

icon-sidebars3

Wiele sidebarów i widgetów – jak nad tym zapanować?

Są zagadnienia w WordPressie, do których napisano dziesiątki wtyczek, a mimo to czasem warto oprogramować je po swojemu. Czasem tak jest po prostu łatwiej, bardziej wydajnie i masz do dyspozycji znacznie większe możliwości. Oczywiście pod warunkiem, że potrafisz programować. Jednym z takich zagadnień jest wyświetlanie różnych sidebarów (różnych zestawów widgetów) na różnych stronach serwisu.

W każdym większym serwsie prędzej czy później napotkamy ten problem. Jeśli jest klasycznie zbudowany (główna kolumna treści i sidebar z widgetami), to na pewno rozsądne jest użycie innego zestawu widgetów na stronie głównej, innego na przykład na stronie  „Kontakt”. Jeśli autor serwisu dba, żeby informacje zawsze były rozmieszczone kontekstowo i aktywnie zarządza użytkownikami, to dla niego nie będzie nonsensem ułożenie innego sidebara dosłownie do każdej strony.

Użyteczność sidebarów

Osoby zajmujące się użytecznością stron powiedzą zapewne, że sidebary to przeżytek i nikt nie klika rzeczy, które się na nich znajdują. Jest w tym sporo prawdy. Wynika to ze sposobu w jaki użytkownicy przetwarzają treść strony, jednak równie ważnym powodem może być niedbalstwo. Na sidebarze często umieszczane jest byle co, jakiś śmietnik informacyjny, na każdej stronie ta sama lista linków, te same pięć ostatnich komentarzy, itp.  Jeśli na sidebarze umieścimy rzeczy naprawdę użyteczne, powiązane z treścią główną, jeśli będą to elementy raczej o charakterze narzędziowym niż nawigacyjnym, nie musi to być przestrzeń zmarnowana. Warto o tym pomyśleć, bo dziś królują szerokie ekrany. Właściwe zagospodarowanie miejsca, które zyskujemy dzięki temu, najczęściej niczemu nie szkodzi.

Warto też pamiętać, że sidebar w WordPressie wcale nie musi być kolumną z widgetami po lewej lub po prawej stronie. Sidebary możemy rozmieszczać w dowolnych miejscach – na przykład powyżej głównej treści lub w stopce. Ba, nawet cała strona może być poskładana z widgetów – w wypadku strony głównej serwisu o charakterze portalu lub magazynu, to wcale nie jest zły pomysł (o ile tylko potrafimy poradzić sobie z wyzwaniami wydajnościowymi)

Jeśli nie jesteś programistą

W repozytorium WordPressa znajdziemy masę wtyczek służących do zarządzania wieloma sidebarami. Warto polecić zwłaszcza dwie, utrzymywane przez duże firmy, po których można oczekiwać sensownej jakości.

WooSidebar i WPMU custom sidebars

http://wordpress.org/plugins/woosidebars/

WooSidebars – to wtyczka dużej firmy WooThemes, jednego z największych dostawców komercyjnych motywów i wtyczek.  Kiedyś manager do sidebarów był wbudowany w ich motywy ale został wydzielony do osobnej wtyczki.

http://wordpress.org/plugins/custom-sidebars/

Custom sidebars – wtyczka niegdyś porzucona, a obecnie prowadzona przez firmę WPMU – mnie osobiście przypadła do gustu bardziej niż rozwiązanie Woo.

Jeśli nie jesteś programistą, definitywnie powinieneś skorzystać z tych rozwiązań. W końcu to jest właśnie najlepsze w WordPressie,  że większość typowych potrzeb jest obsłużona przez darmowe wtyczki, z których może skorzystać nawet zupełny laik.

Jeśli jednak programujesz, warto pomyśleć o innym rozwiązaniu.

Dalsza lektura tego poradnika wymaga przynajmniej podstawowej znajomości PHP.

Jeśli potrafisz programować

Oczywiście to kwestia gustu i zasad, ale jeśli jesteś programistą prawdopodobnie powinieneś zrezygnować z wymienionych wyżej wtyczek i oprogramować wszystko po swojemu. Dlaczego moim zdaniem jest to lepsze rozwiązanie?

  1. Zagadnienie jest proste i osiągnięcie tego co zamierzasz będzie wymagało niewiele kodowania, nie wykraczającego poza abecadło PHP. Unikasz przy tym dość sporej wtyczki o skomplikowanym interfejsie. W tekście o bezpieczeństwie bloga w dziale „7. Nie kolekcjonuj śmieci” opisałem dlaczego warto zachować umiar w korzystaniu z wtyczek.
  2. Przeklikanie się przez wszystkie ekrany wtyczki, aby założyć sidebary i przydzielenie ich do odpowiednich stron jest mozolne, niewygodne, a dane są rozrzucone w wielu miejscach.
  3. Jakikolwiek błąd wtyczki, konieczność jej odinstalowania spowodują, że diabli wezmą wszystkie Twoje mozolnie poukładane sidebary.
  4. Programowanie daje Ci znacznie więcej możliwości. Możesz, dajmy na to, założyć, że strona główna wyświetla inny sidebar w dzień, a inny w nocy, albo sidebar zmienia się w zależności od treści zapytania jakie użytkownik zadał do wyszukiwarki, albo inny sidebar jest wyświetlany dla zalogowanych a inny dla niezalogowanych użytkowników.

Definiowanie sidebarów

Serwis na WordPressie może mieć dowolną liczbę sidebarów ułożonych w dowolnych miejscach, pionowo, poziomo, jak tylko dusza zapragnie, dlatego właściwszym pojęciem jest tu „obszar widgetów”  (ang. widget area) bo słowo sidebar jest raczej zaszłością historyczną. Obydwa te pojęcia będę poniżej stosował wymiennie.

Obszar widgetów tworzymy funkcją register_sidebar(). Na przykład:

register_sidebar( array(
	'name' => 'Sidebar domyślny',
	'id' => 'sidebar-default',
	'description' => 'Pokazuje się wszędzie tam gdzie nie ma innego sidebara';
	'class' => '',
	'before_widget' => '<aside id="%1$s" class="widget %2$s">',
	'after_widget' => '</aside>',
	'before_title' => '<h3 class="widget-title">',
	'after_title' => '</h3>',
));

Funkcja przyjmuje tablicę z parametrami:

  • id –cunikatowy identyfikator sidebara (może się składać tylko z małych liter, cyfr i znaku myślnika)
  • class – klasa CSS danego obszaru widgetów, przydatna, na przykład wtedy, kiedy niektóre obszary widgetów mamy pionowe (widget jeden pod drugim), a inne poziome (widgety obok siebie), albo na przykład wtedy, gdy niektóre obszary widgetów mamy jasne, a inne ciemne – czyli zawsze wtedy gdy nasze obszary widgetów różnią się na tyle wyglądem i rozmieszczeniem, że wymagają oddzielnego stylowania w CSS.
  • before_widget i after_widget  – HTML, który jest wypisany przed każdym widgetem dla danego sidebara i po każdym widgecie. W praktyce jest to najczęściej tag HTML okalający każdy widget. Parametr before_widget przechodzi przez funkcję sprintf, która wkleja w niego dwa elementy: w miejsce %1$s zostanie wstawiony id widgetu (unikatowe nawet jeśli wstawimy widget kilka razy), a w miejsce %2$s zostanie wstawiona klasa unikatowa dla danego widgetu. Domyślnie WordPress używa tutaj taga <li> co wymusza, żeby sidebar był zamknięty w <ul> lub <ol>. Znacznie lepszym (również semantycznie) rozwiązaniem jest użycie taga <aside>, co proponuje większość motywów.
  • before_title i after_title – HTML, który ma być wypisany przed i po tytule każdego widgetu. Domyślne WordPress umieszcza tytuły widgetów w tagu <h2>, większość motywów używa do tego tagu <h3>, i tak jest lepiej z uwagi na SEO. W ogóle dyskusyjne jest, czy powinno się tutaj używać tagów nagłówkowych czy zwykły  <div>.

Trzeba pamiętać, że domyślne wartości tych parametrów ( li oraz h2) nie mogą być zmienione przez twórców WordPressa. Tak to kiedyś wymyślono i teraz wiele serwisów może polegać na tych wartościach, nic samemu nie ustawiając. Gdyby wartości domyślne  zmieniono, te wszystkie serwisy by się rozjechały. Dlatego są to raczej pamiątki po starych koncepcjach, niż wskazówki, jak to zrobić dobrze.

W motywie TwentyTwelve w pliku functions.php możemy znaleźć fragment:

function twentytwelve_widgets_init() {
  register_sidebar( array(
    'name' => __( 'Main Sidebar', 'twentytwelve' ),
    'id' => 'sidebar-1',
    'description' => __('Appears on posts and pages...', 
    					'twentytwelve' ),
    'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    'after_widget' => '</aside>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ) );

  register_sidebar( array(
    'name' => __( 'First Front Page Widget Area', 'twentytwelve' ),
	'id' => 'sidebar-2',
	'description' => __('Appears when using the optional Front Page template...', 
						'twentytwelve' ),
	'before_widget' => '<aside id="%1$s" class="widget %2$s">',
	'after_widget' => '</aside>',
	'before_title' => '<h3 class="widget-title">',
	'after_title' => '</h3>',
  ) );

  register_sidebar( array(
	'name' => __( 'Second Front Page Widget Area', 'twentytwelve' ),
	'id' => 'sidebar-3',
	'description' => __('Appears when using the optional Front Page template...', 
						'twentytwelve' ),
	'before_widget' => '<aside id="%1$s" class="widget %2$s">',
	'after_widget' => '</aside>',
	'before_title' => '<h3 class="widget-title">',
	'after_title' => '</h3>',
  ) );
}

add_action( 'widgets_init', 'twentytwelve_widgets_init' );

Widzimy tutaj definicję trzech obszarów widgetów (w tym motywie tak naprawdę tylko jeden z tych obszarów jest sidebarem z prawdziwego zdarzenia).

Definicje obszarów widgetów zamknięto w funkcję twentytwelve_widgets_init(), która wywoływana jest na haku widgts_init. Służy on właśnie do tego oraz do rejestrowania własnych widgetów jeśli takie napiszemy.

Widzimy, że autorzy motywu Twenty Twelve zadbali o to, żeby nazwa i opis każdego sidebara podlegały tłumaczeniu, używając funkcji __() i to ładnie z ich strony, natomiast bardzo nieeleganckie jest przydzielanie poszczególnym sidebarom nazw w rodzaju sidebar-1, sidebar-2, itd. Jeśli korzystamy z wtyczek te identyfikatory nie maja większego znaczenia, bo nigdzie ich nie będziemy widzieć, jednak jeśli chcemy zarządzać sidebarami programowo, lepiej jest przydzielić bardziej konkretne nazwy.

Wyświetlanie sidebara (obszaru widgetów)

W pliku sidebar.php znajdziemy następujący kod:

<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
	<div id="secondary" class="widget-area" role="complementary">
		<?php dynamic_sidebar( 'sidebar-1' ); ?>
	</div><!-- #secondary -->
<?php endif; ?>

Funkcja is_active_sidebar('sidebar-1') wywołana w pierwszej linii zwróci true jeśli na sidebarze sidebar-1 zostaną rozmieszczone jakiekolwiek widgety,  w przeciwnym wypadku zwróci false. Od razu widzimy, dlaczego warto nadawać siedebarom bardziej deskryptywne nazwy.

W kolejnej linii widzimy wywołanie funkcji dynamic_sidebar('sidebar-1'). Wypisuje ona pierwszy ze zdeklarowanych powyżej sidebarów. Oprócz tego zwraca true, albo false w tej samej logice co funkcja is_active_sidebar(), czyli w zależności od tego, czy na podanym sidebarze umieszczono jakieś widgety. Można ją więc użyć w następujący sposób (przykład z motywu Twenty Eleven):

<div id="secondary" class="widget-area" role="complementary">
	<?php if ( ! dynamic_sidebar( 'sidebar-1' ) ) : ?>

	<aside id="archives" class="widget">
	  <h3 class="widget-title"><?php _e( 'Archives', 'twentyeleven' ); ?></h3>
	  <ul>
		<?php wp_get_archives( array( 'type' => 'monthly' ) ); ?>
	  </ul>
	</aside>

	<aside id="meta" class="widget">
	  <h3 class="widget-title"><?php _e( 'Meta', 'twentyeleven' ); ?></h3>
	  <ul>
		<?php wp_register(); ?>
		  <li><?php wp_loginout(); ?></li>
		<?php wp_meta(); ?>
      </ul>
	</aside>

	<?php endif; // end sidebar widget area ?>
</div><!-- #secondary .widget-area -->

Powyższy kod wypisuje sidebar dynamiczny sidebar-1 jeśli są na nim jakiekolwiek widgety, a w przeciwnym wypadku wypisuje – listę miesięcznych archiwów i blok linków technicznych.

Warto zauważyć, że funkcja dynamic_sidebar() sama z siebie nie dodaje żadnego HTML’a wokół wypisywanych widgetów, musimy to zrobić sami – widać to w linii:

<div id="secondary" class="widget-area" role="complementary">

obu powyższych fragmentów kodu

Przykład praktyczny

Załóżmy, że pracujemy nad serwisem publikującym informacje o konferencjach naukowych.  W serwisie korzystamy z różnych typów wpisów (post types)

  • post – wiadomości ze świata nauki, podzielone na kategorie odpowiadające dziedzinom naukowym.
  • spotkanie – do opisywania samych konferencja (nazwa, opis, data, itp.). Dodajmy tutaj taksonomię kategoria_spotkan, która pozwoli nam podzielić spotkania wg tematyki.
  • mowca – do notek biograficznych uczestników (mówców, wykładowców)
  • wyklad – do opisu poszczególnych wystąpień/wykładów, ewentualnie osadzania materiałów (zapisów) z tych wystąpień.

Definiowanie typów wpisów i taksonomii nie jest tematem tego poradnika, ale jeśli chcesz testować przykłady użyj poniższego kawałka kodu aby zarejestrować typy wpisów i taksonomię, których używam.

function my_theme_register_tax_and_types() {

    $cpt_meeting_args = array (
        'public' => true,
        'has_archive' => true,
        'label' => 'Spotkania',
    );
    register_post_type( 'spotkanie', $cpt_meeting_args );

    $cpt_lecture_args = array (
        'public' => true,
        'has_archive' => true,
        'label' => 'Wykład',
    );
    register_post_type( 'wyklad', $cpt_lecture_args );

    $cpt_speaker_args = array (
        'public' => true,
        'has_archive' => true,
        'label' => 'Mówca',
    );
    register_post_type( 'mowca', $cpt_speaker_args );

    $tax_category_of_meeting_args = array (
        'public' => true,
        'label' => 'Kategoria spotkań',
    );
    register_taxonomy('kategoria_spotkan', array ('spotkanie' ), 
	                  $tax_category_of_meeting_args);
}

add_action('init', 'my_theme_register_tax_and_types');

Ponadto serwis ma stronę kontakt i stronę sponsorzy.

Teraz załóżmy, że chcemy użyć różnych sidebarów na różnych stronach, w zależności od typu wpisów (inny dla spotkania, inny dla mówcy, inny dla newsa itd.). Chcemy też inny sidebar na stronie wyników wyszukiwania oraz specjalny sidebar dla spotkań oraz newsów poświęconych astronomii. Dodatkowo chcemy aby sidebar strony głównej miał wersje dla zalogowanych i dla niezalogowanych użytkowników. Sporo wymagań i przynajmniej niektóre nie są realizowalne żadną z dostępnych wtyczek.

Załóżmy, że mamy też jakiś domyślny sidebar, który jest użyty jeśli nie zdefiniujemy sidebara specyficznego dla danej strony, albo zdefiniowany sidebar jest pusty.

W pliku functions.php naszego motywu musimy dodać funkcję rejestrującą nasze sidebary i zapiąć ja na haka widgets_init. Żeby jednak uniknąć nabijania kodu powtarzającymi się liniami załóżmy na chwilę, że wszystkie sidebary będziemy stylować tak samo więc nie będą się różniły argumentami before_widget, after_widget, before_title i after_title, co pozwoli nam zapisać funkcję w znacznie bardziej zwięzłej postaci.

function my_theme_sidebars_init() {

    $sidebars = array(
        'sidebar-spotkanie-lista'  => __('Meeting List'   ,'my-theme'),
        'sidebar-spotkanie-detal'  => __('Meeting Detail' ,'my-theme'),
        'sidebar-newsy'            => __('News'           ,'my-theme'),
        'sidebar-astronomia'       => __('Astronomy'      ,'my-theme'),
        'sidebar-mowca'            => __('Speaker'        ,'my-theme'),
        'sidebar-wyklad-lista'     => __('Lecture List'   ,'my-theme'),
        'sidebar-wyklad-detal'     => __('Lecture Detail' ,'my-theme'),
        'sidebar-strona-sponsorzy' => __('Page: Sponsors' ,'my-theme'),
        'sidebar-strona-kontakt'   => __('Page: Contact'  ,'my-theme'),
        'sidebar-szukaj'           => __('Search results' ,'my-theme'),
        'sidebar-home'             => __('Home page'      ,'my-theme'),
        'sidebar-home-zalogowany'  => __('Home page, logged in' ,'my-theme'),

        'sidebar-domyslny'         => __('Default Sidebar','my-theme'),
    );

    foreach ($sidebars as $sbid => $sbname) {
        register_sidebar( array (
            'name' => $sbname,
            'id' => $sbid,
            'before_widget' => '<aside id="%1$s" class="widget %2$s">',
            'after_widget'  => "</aside>",
            'before_title'  => '<h3 class="widget-title">',
            'after_title'   => '</h3>',
        ) );
    }
}

add_action( 'widgets_init', 'my_theme_sidebars_init' );

Jeśli nasz motyw jest potomny do motywu, który już definiuje jakieś własne sidebary, prawdopodobnie będziemy chcieli się ich pozbyć, żeby nie zaśmiecały nam i tak już długiej listy. Możemy w tym celu użyć unregister_sidebar(). Zróbmy więc funkcję, wyrejestrowuje wszystkie niepotrzebne sidebary i zapnijmy ją również na na haku widgets_init, ale w taki sposób aby wykonała się po funkcji lub funkcjach rejestrujących sidebary. Musimy więc użyć wyższego priorytetu – w poniższym przykładzie jest to 11, możemy dać jeszcze wyższa liczbę (domyślna wartość, z którą motywy najczęściej rejestrują sidebary to 10). Jeśli nasz motyw jest potomny do Twenty Twelve, nasza funkcja czyszcząca odziedziczone sidebary powinna wyglądać następująco.

function my_theme_clean_sidebars (){
    unregister_sidebar( 'sidebar-1' );
    unregister_sidebar( 'sidebar-2' );
    unregister_sidebar( 'sidebar-3' );
}
add_action( 'widgets_init', 'my_theme_clean_sidebars', 11 );

Teraz pozostaje nam wyświetlić odpowiednie sidebary na odpowiednich stronach.  Otwieramy lub tworzymy w naszym motywie plik sidebar.php i dodajemy kod realizujący nasze (wcześniej opisane) założenia. Nasz motyw może wymagać jakichś dodatkowych elementów HTML, w wypadku motywu Twenty Twelve możemy naszym kodem zastąpić całą zawartość pliku sidebar.php.

<div id="sidebar" class="widget-area" role="complementary">
<?php
$is_sidebar = false;
// Strona główna  -------------------------------------
if (is_home()) {
	if (is_user_logged_in())
		$is_sidebar = dynamic_sidebar('sidebar-home-zalogowany');
	else
		$is_sidebar = dynamic_sidebar('sidebar-home');
}
// Mowca -------------------------------------
else if (is_post_type_archive('mowca') || is_singular('mowca'))
	$is_sidebar = dynamic_sidebar('sidebar-mowca');
// Wyklad -------------------------------------
else if (is_post_type_archive('wyklad'))
	$is_sidebar = dynamic_sidebar('sidebar-wyklad-lista');
else if (is_singular('wyklad'))
	$is_sidebar = dynamic_sidebar('sidebar-wyklad-detal');
// Post -------------------------------------
else if (is_single() || is_archive()) {
	if (has_category('astronomia'))
		$is_sidebar = dynamic_sidebar('sidebar-astronomia');
	else
		$is_sidebar = dynamic_sidebar('sidebar-newsy');
}
// Spotkanie -------------------------------------
else if (is_post_type_archive('spotkanie') || is_singular('spotkanie')) {
	if (has_term('astronomia','kategoria_spotkan')) {
		$is_sidebar = dynamic_sidebar('sidebar-astronomia');
	}
	else {
		if (is_post_type_archive('spotkanie'))
			$is_sidebar = dynamic_sidebar('sidebar-spotkanie-lista');
		else if (is_singular('spotkanie'))
			$is_sidebar = dynamic_sidebar('sidebar-spotkanie-detal');
	}
}
// Strony -------------------------------------
else if (is_page('kontakt'))
	$is_sidebar = dynamic_sidebar('sidebar-strona-kontakt');
else if (is_page('sponsorzy'))
	$is_sidebar = dynamic_sidebar('sidebar-strona-sponsorzy');
// Wyszukiwarka -------------------------------------
else if (is_search()) {
	if (preg_match('/astronom/i',get_search_query()))
		$is_sidebar = dynamic_sidebar('sidebar-astronomia');
	else
		$is_sidebar = dynamic_sidebar('sidebar-szukaj');
}
// A jeśli nie było odpwiedniego sidebara lub był pusty  -------------------------------------
if (!$is_sidebar)
	dynamic_sidebar('sidebar-domyslny');
?>
</div><!-- #secondary .widget-area -->
  • Najpierw (linia 3) powołujemy zmienną $is_sidebar, która na koniec da nam odpowiedź, czy jakikolwiek sidebar został wyświetlony.
  • Następnie (linie 5-10) wyświetlamy jeden z sidebarów dla strony głównej, albo ogólny, albo dla zalogowanego użytkownika.
  • W kolejnych liniach (12-13) wyświetlamy sidebar przeznaczony dla wpisów typu mowca. Warto zauważyć, że nie używamy tutaj funkcji get_post_type(). Mogłaby ona nas zwieść na manowce, na tych stronach gdzie wyświetlane są pomieszane wpisy różnych typów (np. na stronie wyników wyszukiwania). Sidebar wyświetlany jest zwykle po pętli głównej WordPressa dla danej strony, więc funkcja get_post_type() zwracałaby nam zawsze typ ostatniego wyświetlonego wpisu. Stosując funkcje warunkowe WordPressa (nazwy większości z nich zaczynają się od is_ lub has_) dobrze jest trzymać się zasady stosowania funkcji, która jak najciaśniej określa nasz warunek.
  • W liniach 15-18 wyświetlamy sidebary dla typu wyklad, inny dla archiwum wpisów tego typu, a inny dla pojedynczego wpisu.
  • W liniach 20-25 wyświetlamy sidebary dla zwykłych wpisów, inny dla archiwum, a inny dla pojedynczych wpisów, przy czym mamy specjalny sidebar dla kategorii ‚astronomia’
  • Podobnie postępujemy z typem wpisu spotkanie w liniach 27-37.
  • W kolejnych liniach 39-42 wyświetlamy dwa sidebary dla dwóch wyróżnionych stron: Kontakt i Sponsorzy
  • W liniach 44-49 wyświetlamy sidebar dla wyników wyszukiwania przy czym sprawdzamy treść zapytania  jeśli pojawi się w nim zlepek ‚astronom’ wyświetlamy nasz sidebar astronomiczny.
  • Na końcu sprawdzamy czy jakikolwiek sidebar został wyświetlony i jeśli nie, wyświetlamy sidebar domyślny. Pojawi się on wtedy gdy nie mieliśmy żadnego sidebara dla danej strony lub sidebar był, ale nie umieszczono na nim żadnego widgetu.

Więcej możliwości

Oczywiście oprócz użytych w powyższym przykładzie funkcji warunkowych mamy do dyspozycji masę innych. Dzięki nim możemy wyświetlić specjalny sidebar:

  • dla archiwum kategorii – funkcja is_category()
  • dla archiwum tagu – funkcja is_tag()
  • dla jednego konkretnego postu – funkcja is_single z parametrem
  • dla archiwum po dacie (miesiącu, roku, dniu) – funkcje is_day(), is_month()is_year()
  • dla danego autora – funkcja  is_author()
  • dla strony błędu 404 – funkcja  is_404()
  • dla strony załącznika – funkcja  is_attachment()

No i oczywiście możemy wymyślić dowolny inny warunek, nie jesteśmy ograniczeni niczym poza API WordPressa i nasza wiedzą.

Choć zwykle mamy odruch unikania programowania za wszelką cenę i korzystania z gotowych rozwiązań, jednak czasami taki wybór jest obiektywnie gorszy.

Wybierając rozwiązania zawsze powinniśmy się kierować rachunkiem zysków i strat w danych warunkach, a nie przesądami. WordPress zdobył Internet dzięki swojemu pragmatyzmowi i powinniśmy czerpać z tego doświadczenia.

Powiadomimy Cię o nowych artykułach

Komentarzy: 5

  1. Wielkie dzięki za artykuł, szukałem wtyczki do zarządzania sidebarem i trafiłem przez przypadek na Twój wpis, dzięki czemu zrobiłem sobie sam wtyczkę, jeszcze raz wielkie dzięki 😉

  2. hej, Dobry Człowieku
    zupelnie świeży jestem w temacie WordPress, od trzech dni sięoswajam i próbuję zapanować nad chaosem informacji:)
    dzisiaj szukałem w miare czystych templatek, na których można wprowadzać swoje koncepcje; zależało mi na tym, by miały sidebary left i right; ale jak się okazało ich wstawienie nie jest specjalnie trudne;

    w końcu przychodzę do Ciebie i dostaje tyle bogactwa programistycznego za darmo:)
    fajnie ,dzięki
    aż dziw, że tak mało komentarzy

    • To życzę Ci odkrywania WordPress – ma bardzo duże możliwości – ja od pewnie dwóch lata bawię się tym systemem.

  3. Generalnie mnie się podoba nowa wersja, dokonałem aktualizacji w moich stronach po przeszło półrocznej przerwie w aktualizowaniu i działa – funkcjonuje wszystko nieźle

  4. Fajny artykuł trochę to dla mnie czarna magia ale pomału w skupieniu da się przebrnąć przez to wszystko.