WordPressowe Linki #8

7 fragmentów kodu powiązanych z serwisami społecznościowymi

Jeżeli nie lubicie używać do wszystkiego wtyczek, to z pewnością powyższa kolekcja fragmentów kodu przyda Wam się, jeżeli korzystacie z funkcjonalności serwisów społecznościowych na swoich witrynach.

Opis działania funkcji _n_noop

Artykuł o funkcji _n_noop, związanej z tłumaczeniami wtyczek, która jest czasami dobrą alternatywą dla funkcji _n.

Słownik WordPressowych pojęć dla początkujących

Zgrabnie przygotowany słownik najpopularniejszych pojęć związanych z WordPressem. Przydatna lektura, szczególnie dla osób, które dopiero zaczynają swoją przygodę z tym CMS-em.

10 powodów dlaczego WordPress jest dobrym punktem startu, nawet dla zaawansowanych programistów PHP

Próba przekonania „starych wyjadaczy”, dlaczego warto stosować WordPressa jako bazę swoich projektów. Artykuł zawiera krótki opis najważniejszych cech architektonicznych i funkcjonalnych WordPressa.

Czy nadeszła pora na program certyfikacyjny WordPressa?

Jak widać są ludzie, którzy uważają, że po 10 latach WordPress dojrzał do tego by posiadać własny program certyfikacyjny. Z pewnością znaleźliby się ludzie, którzy byliby skłonni nawet zapłacić za zdobycie takowego certyfikatu. Osobiście nie będę ukrywał, że tego typu certyfikaty kojarzą mi się z nauczeniem się jakiejś partii wiedzy na pamięć i w oderwaniu od realnych zastosowań. Moim zdaniem lepiej mieć w portfolio kilka-kilkanaście ciekawych projektów opartych o WordPressa – to będzie wystarczający „certyfikat” Waszej wiedzy i umiejętności (które można zweryfikować zaglądając do kodu).

 

WordPressowe Linki #6

Ważna zmiana w regułach zatwierdzania motywów na wordpress.org

W wytycznych dotyczących dodawania nowych motywów na repozytorium wordpress.org zaszła istotna zmiana – od teraz przechodzenie przez motyw testu jednostkowego jest zalecane a nie wymagane.

Generator Yeoman dla WordPressa

Przydatna rzecz dla miłośników ułatwiania sobie życia i automatyzacji prac poprzez narzędzie Yeoman.

WordPress Core będzie korzystać z SASS-a

Wygląda na to, że kod CSS dla kokpitu, będzie tworzony z użyciem preprocessora CSS – SASS. Ma to na celu przede wszystkim łatwiejsze wprowadzanie zmian w wyglądzie panelu administracyjnego np. poprzez oferowane przez SASS zmienne.

5 głównych grzechów spotykanych w motywach dla WordPressa

Zestawienie pięciu poważnych błędów spotykanych często w motywach dla WordPressa. Dla osób planujących tworzenie motywów pozycja obowiązkowa. Swoją drogą spokojnie można by ją rozszerzyć o kilka innych istotnych błędów np. brak wsparcia dla Child Themes, brak filtrów i akcji wbudowanych w motyw itd.

WordPress.org vs. WordPress.com

Szczegółowe porównanie różnic pomiędzy WordPressem w wydaniu „*.org” i w wydaniu „.com”

Matt Mullenweg na Joomla! World Conference

Na ostatnim Joomla! World Conference swoją prezentację miał współtwórca WordPressa – Matt Mullenweg. Tego typu wydarzenia są moim zdaniem niesamowicie ważne dla społeczności open-source, gdyż mają na celu pokazanie, że najważniejsza jest współpraca i uczenie się od siebie nawzajem.

Bywając na polskich konferencjach poświęconych Joomla i WordPressowi spotkałem dużo osób, których zapatrzenie w jedną z tych platform nosi wręcz znamiona bycia fanatycznym zwolennikiem. Jako developer z doświadczeniem w obu tych platformach mam zawsze jeden przekaz dla takich osób: ograniczanie się do jednego CMSa szkodzi Wam i Waszym klientom.

Wynika to z prostego faktu – jedni zaciągają Joomla! do zbyt prostych projektów, a drudzy biorą WordPressa do zbyt skomplikowanych zadań. W efekcie klient otrzymuje narzędzie (CMS) zastosowane nieadekwatnie do swoich potrzeb.

Dodatkowo taka monotonia w doborze narzędzi szkodzi też developerowi – nie ukrywam, że przynajmniej dla mnie uczenie się czegoś nowego to zawsze podróż w nieznane i dlatego lubię to robić.

Dla wszystkich tych, którzy nie boją się wyjść poza strefę swojego CMS-owego komfortu, polecam serię WordPress vs. Joomla, która ma na celu przybliżenie różnic pomiędzy tymi CMSami. Niebawem pojawią się nowe wpisy z tej serii.

Własne filtry obrazu (sepia, greyscale) w WP_Image_Editor

Standardowo implementacja klasy WP_Image_Editor nie udostępnia nam żadnych filtrów dla obrazów takich jak sepia czy skala odcieni szarości (greyscale). Na szczęście klasa ta została zaimplementowana w bardzo elastyczny sposób, przez co umożliwia dodanie własnych metod. Pokażę więc w jaki sposób można stworzyć własne filtry obrazu.

Idea stojąca za WP_Image_Editor

Klasa WP_Image_Editor jest klasą abstrakcyjną – czyli najprościej mówiąc służy za wzór dla innych, bardziej szczegółowych implementacji operacji na obrazie z wykorzystaniem różnych bibliotek graficznych. Stąd też w WordPressie znajdziemy takie klasy jak WP_Image_Editor_Imagick czy WP_Image_Editor_GD. Obie wspomniane klasy odpowiadają za implementację operacji na obrazie z użyciem dwóch popularnych bibliotek graficznych: ImageMagick i GD. Trzeba o tym pamiętać gdyż fakt ten ma bardzo ważną implikację – implementując jakiś efekt powinniśmy zadbać o jego wsparcie w obu wypadkach (no chyba, że robimy projekt na własne potrzeby i pod konkretną konfigurację serwera).

Implementacja nowych metod operujących na obrazie

Jak można dodać własne metody operujące na obrazie? Trzeba stworzyć klasy potomne dla klas WP_Image_Editor_Imagick i WP_Image_Editor_GD. Poniżej znajduje się moja implementacja metod dziudek_greyscale i dziudek_sepia:

class Dziudek_Imagick_Filters_Editor extends WP_Image_Editor_Imagick {
  public function dziudek_sepia($arg = 100) {
    $this->image->sepiaToneImage($arg);
    return true;
  }
  public function dziudek_greyscale() {
    $this->image->modulateImage(100,0,100);
    return true;
  }
}
class Dziudek_GD_Filters_Editor extends WP_Image_Editor_GD {
  public function dziudek_sepia() {
    imagefilter($this->image, IMG_FILTER_GRAYSCALE);
    imagefilter($this->image, IMG_FILTER_COLORIZE, 90, 60, 40);
    return true;
  }

  public function dziudek_greyscale() {
    imagefilter($this->image, IMG_FILTER_GRAYSCALE);
    return true;
  }
}

Jak widać stworzyliśmy dwie klasy potomne. Teoretycznie mógłbym metody nazwać sepia i greyscale ale niedługo wyjaśni się czemu lepiej zastosować prefiks.

Najprawdopodobniej będziemy musieli też dołączyć wszystkie potrzebne klasy do naszego pliku z nowymi klasami potomnymi:

require_once(ABSPATH . WPINC . '/class-wp-image-editor.php');
require_once(ABSPATH . WPINC . '/class-wp-image-editor-imagick.php');
require_once(ABSPATH . WPINC . '/class-wp-image-editor-gd.php');

Mamy już prawie wszystko czego nam potrzeba – pora sprawić, żeby nasz kod był dostępny w WordPressie w metodzie wp_get_image_editor – w tym celu wykorzystamy filtr wp_image_editors:

function dziudek_add_image_filters_editors( $editors ) {
  array_unshift( $editors, 'Dziudek_Imagick_Filters_Editor' );
  array_unshift( $editors, 'Dziudek_GD_Filters_Editor' );

  return $editors;
}

add_filter( 'wp_image_editors', 'dziudek_add_image_filters_editors' );

Powyższa funkcja spowoduje dodanie naszych klas potomnych do listy dostępnych edytorów obrazu.

Pora użyć naszego kodu

Wyprodukowaliśmy już sporo kodu, zatem pora z niego zrobić użytek 🙂

Aby wykorzystać nasze własne klasy, musimy skorzystać z drugiego parametru metody wp_get_image_editor:

$img_editor = wp_get_image_editor( 
    $path_to_file, 
    array( 'methods' => array( 'dziudek_sepia', 'dziudek_greyscale' ) ) 
);

Pierwszy argument to oczywiscie ścieżka do pliku na którym będziemy działać, natomiast ten drugi argument pozwala nam określić jakich dodatkowych metod oczekujemy po edytorze obrazu. Słowo klucz to „oczekujemy” – może się okazać, że żaden z dostępnych edytorów obrazu nie oferuje pożądanej przez nas funkcjonalności – wtedy zmienna $img_editor będzie zawierać obiekt klasy WP_Error z informacją „No image editor”. W naszym wypadku jednak wszystko powinno zadziałać i WordPress powinien zwrócić instancję klasy Dziudek_GK_Filters_Editor lub Dziudek_Imagick_Filters_Editor zależnie od tego, która z tych bibliotek zainstalowana jest u nas na serwerze.

Dzięki temu będziemy mogli wykonać następujący kod:

$img_editor->dziudek_greyscale();

lub:

$img_editor->dziudek_sepia();

Wracając do prefiksów w nazwach tych metod. Teoretycznie dla skrócenia kodu można by je pominąć, ale pamiętajmy – autor jakiejś wtyczki może dodać własne funkcjonalności różniące się efektami od naszych i wtedy pojawi się problem, gdyż taka implementacja może zostać wczytana zamiast naszej jako edytor obrazu ze względu na spełnienie naszych potrzeb odnośnie funkcjonalności (polecam w tym miejscu analizę metody _wp_image_editor_choose). Zatem osobiście polecam jednak używać prefiksów w nazwach metod lub używanie bardziej wyszukanych nazw metod 🙂

Podsumowanie

Jak widać implementacja klasy WP_Image_Editor jest bardzo elastyczna i pozwala na łatwe dodawanie funkcjonalności. Z mojego punktu widzenia najwygodniejsze jest to, że nie muszę się martwić o wykrywanie poszczególnych bibliotek graficznych – kod WordPressa robi to za mnie. Polecam własne eksperymenty z filtrami obrazu 🙂

WordPressowe Linki #2

Kolejna dawka przydatnych narzędzi i informacji.

Generator plików Readme dla pluginów

Kolejne bardzo przydatne narzędzie od GenerateWP – dzięki prostemu formularzowi można wygenerować cały plik Readme dla pluginu, wymagany na stronie WordPress.org.

Markdown w WordPressie

Artykuł dla tych, którzy po premierze Ghosta zapragnęli mieć edytor Markdown u siebie w WordPressie. Zawiera analizę dostępnych wtyczek oraz praktyczne uwagi odnośnie ich ograniczeń.

Podgląd wpisów na różnych podstronach

Bardzo przydatna wtyczka made in Poland 🙂 Pozwala na podejrzenie wyglądu przygotowywanego wpisu na stronie głównej czy stronie kategorii – idealne rozwiązanie dla tych, którzy bardzo ostrożnie i z uwagą dobierają wygląd skróconej treści wpisu.

WordUP Łódź #1

8. Listopada odbędzie się pierwszy WordUp w Łodzi – zapraszam już teraz, będę i ja – razem z krótką prelekcją oraz gadżetami 😉 Szczegóły odnośnie mojej prelekcji pojawią się w przyszłym tygodniu.

Jak odinstalować WordPress MultiSite

Dla tych, którzy nagle stwierdzili, że jednak MultiSite jest im niepotrzebny 🙂

CleverRules – przepisywanie adresów w inny sposób

Dla tych, którzy potrzebują alternatywy dla WP_Rewrite 🙂

 

Ghost – konkurencja dla WordPressa?

Wczoraj udostępniony został publicznie kod źródłowy projektu Ghost. Jako, że jestem mocno zainteresowany tego typu inicjatywami to od razu zabrałem się do testowania. I cóż… za wiele do testowania nie było. W zasadzie dłużej zajęło mi czekanie na zainstalowanie wszystkich potrzebnych modułów node.js + rozwiązanie problemu z modułem sqlite3 niż przejrzenie całego panelu Ghosta.

Pierwsza myśl? Przypomniały mi się studenckie czasy i oglądanie oddawanych na zaliczeniu aplikacji zawierających góra połowę zakładanych na początku funkcjonalności – w sumie cóż innego mogłem sobie pomyśleć, jeżeli przy logowaniu się do panelu administracyjnego ujrzałem komunikat o tym by ostrożnie dobierać hasło, gdyż funkcja resetowania hasła jest jeszcze niedostępna.

Przyznam, że trochę komicznie to wygląda zarówno z punktu widzenia developera jak i zwykłego użytkownika.

Kolejna sprawa – jedną z najbardziej interesujących mnie rzeczy w Ghost była zakładka „Dashboard”, która miała wyświetlać użyteczne informacje. Niestety w pobranej wersji nie znalazłem jej – bardzo mnie to zawiodło.

Wiem, że to wersja 0.3.* ale przy takim stylu to najlepszy marketing Ghostowi nie pomoże. Lepiej byłoby się wstrzymać kilka tygodni i wydać publicznie dostępną, bardziej dopracowaną wersję, zwłaszcza, że autorzy dysponują bardzo dużym zapleczem (~6000) testerów z Kickstartera.

Trochę pozytywów

Poza wspomnianymi wadami są oczywiście też zalety:

  • wbudowany edytor oparty o Markdown – uwielbiam Markdown więc każda jego implementacja w aplikacjach mnie cieszy – w Ghost jest ona moim zdaniem udana, dzięki zastosowaniu wyświetlania bezpośredniego podglądu kodu wynikowego obok edytora,
  • prostota – Ghost ma być platformą blogową i niczym ponad to, stąd panel jest banalny w obsłudze (choć braku dashboardu nie mogę przeżyć 😉 )
  • Licencja MIT – jedna z moich ulubionych – za to duży plus 🙂

Jeszcze trochę wad i braków

  • Brak kategorii – nie wiem czy jest planowane dodanie kategorii w przyszłości jako części Ghosta, ale mam dziwne przeczucie, że będzie to spora wada. Zwłaszcza w sytuacji, kiedy ktoś będzie miał więcej wpisów na blogu – wtedy poruszanie się po nich i szukanie ich w zakładce „Content” będzie moim zdaniem boleć.
  • Node.js zamiast PHP – technologicznie jest to moim zdaniem dobry wybór, ale pod względem popularności i świadomości użytkowników mam pewne obawy. Myślę, że w tym wypadku wielką rolę odegra gotowa platforma podobna do wordpress.com – wtedy technologia dla szarego użytkownika nie będzie stanowić problemu.
  • Brak wbudowanego systemu komentarzy – wiem, że są i będą pojawiać się różnej maści wtyczki związane z tym tematem, ale mimo wszystko – jeżeli instaluję system typowo blogowy to powinien on mieć wbudowany jakiś system komentarzy od razu.
  • Brak zarządzania rozszerzeniami – cóż, to mnie trochę dziwi, gdyż jeżeli coś ma być do bólu proste w obsłudze to powinno być chociaż jedno wielkie pole „drag’n’drop” do instalacji rozszerzeń

Podsumowanie

Ghost cierpi jeszcze z powodu niedostatków wieku niemowlęcego – koncepcja jest ciekawa, ale będzie wymagała mocnego dopracowania. Być może za rok lub dwa lata zrodzi się z tego ciekawa platforma, na tą chwilę niestety brakuje wielu kluczowych funkcjonalności i Ghost może stanowić jedynie bardzo egzotyczną ciekawostkę, która nadaje się na mocno uproszczony notatnik.

Odpowiadając na tytułowe pytanie – WordPress na razie może spać spokojnie 🙂 A nawet gdy już Ghost dorośnie to prawdopodobnie WordPress nie będzie już w ogóle traktowany jako platforma blogowa więc i tak nie będzie musiał konkurować z Ghost.

WordPressowe Linki #1

Ponieważ nie każdy śledzi mój zbiór linków na zebymniezapomnial.tumblr.com, postanowiłem regularnie publikować tutaj najciekawsze zasoby związane z WordPressem wraz z krótką notką ode mnie.

WP Test

Dla tych którym nie wystarczają dane testowe z Codex Theme Unit Test. Moim zdaniem bardzo przydatne narzędzie, gdyż uwzglednia różne dziwne przypadki z życia wzięte – np. wiele poziomów submenu w menu głównym. Warto rzucić okiem na demo.

10 wartych uwagi prelekcji z WordCamp Europe

Ciekawa kolekcja prelekcji poruszajacych ważne tematy z zakresu bezpieczeństwa, internacjonalizacji, konfiguracji, unit testów itp.

Linkowanie z tytułu wpisu do zewnętrznego URL-a

Krótki opis jak podlinkować tytuły wpisów do zewnętrznych stron WWW. Przydatne gdy ktoś prowadzi blog podobny do mojego „żebym nie zapomniał” 😉

Darmowy motyw dokumentacji oparty o BuddyPress

Kolejny ciekawy sposób na wykorzystanie możliwości BuddyPressa. Tym ciekawszy, że motyw dostępny jest za darmo.

40 przydatnych wtyczek od shortcode-ów dla WordPressa

Przydatna kolekcja dla wszystkich miłośników jednego z najbardziej przydatnych mechanizmów wbudowanych w WordPressa.

Dodawanie animowanej favikony do WordPressa

Jeżeli Wasza witryna prezentuje dane w dynamiczny sposób i lubicie poprawiać UX Waszej witryny w przeglądarce to z pewnością ten artykuł jest dla Was.

Wtyczki do zdobywania informacji zwrotnej od użytkownika

Kolekcja wtyczek wyświetlających w rozmaity sposób formularze proszące o wyrażenie opinii użytkownika o danej podstronie, treściach etc. Przydatne szczególnie w obszarach e-commerce.