WP Sprzedawca i różne stawki za dostęp do płatnej treści

Tworząc wtyczkę WP Sprzedawca założyłem sobie, że będzie ona służyła ukryciu treści i pobieraniu za odblokowanie opłaty. Przy czym opłata ta będzie sztywna, taka sama dla wszystkich wpisów. Dlatego też, gdy ktoś mnie pytał czy można zablokować różne wpisy i za każdy żądać inną kwotę, odpowiadałem, że nie.

Traf chciał, że jeden z klientów zamiast mnie o to zapytać, postanowił po prostu wprowadzić taką możliwość. 🙂 I okazało się, że metoda jest bajecznie prosta i aż wstyd, że sam na nią wcześniej nie wpadłem.

Całość sprowadza się do zainstalowania wtyczki w kilku kopiach na serwerze. A jest to możliwe dzięki kilku prostym krokom.

Zakładamy, że masz już zainstalowanego WP Sprzedawcę i kilka wpisów zablokowałeś/łaś już za jego pomocą. Teraz chcesz wprowadzić kolejną stawkę i zablokować kolejne wpisy. Po kolei:

  1. W katalogu wtyczek kopiujemy katalog /wp-sprzedawca i wklejamy go ponownie w tej samej lokalizacji, ale pod inną nazwą (np /wp-sprzedawca-2)
  2. W katalogu /wp-sprzedawca-2 otwieramy do edycji plik wp-sprzedawca.php
  3. Modyfikujemy w nim linijkę ‚Plugin Name: WP Sprzedawca’ (na samym początku pliku) tak by brzmiała ‚Plugin Name: WP Sprzedawca 2’
  4. Wyszkujemy wszystkie definicje funkcji (zaczynają się od słowa function i spacji) i zmieniamy je dodając cyfrę dwa na końcu nazwy. Zmieniamy też owe nazwy w wywołaniach (i odwołaniach w add_action i add_filter) funkcji.
  5. Wyszukujemy w pliku wszystkie wystąpienia zwrotu ‚platny’ i zmieniamy je na ‚platny2’ (powinny to być trzy wystąpienia)
  6. Zapisujemy plik
  7. Konfigurujemy wtyczkę tak samo jak zrobiliśmy to przy pierwszej instalacji. Oczywiście teraz podajemy inne stawki za dostęp do wpisu
  8. Aktywujemy wtyczkę

Od tej pory możemy ukrywać już wpisy i pobierać za nie inną stawkę. Ważne jest aby dodając do nich pole custom field nazywać teraz ‚platny2’ (dla nowej stawki) lub po staremu ‚platny’ (dla stawki starej).

Prawda, że proste? 🙂 Jeśli chodzi o kwestie „prawne” nie mam nic przeciwko muliplikacji instalacji wtyczki na własnym serwerze, więc śmiało – jeśli kupiliście już wtyczkę ode mnie, nie trzeba kupować jej po raz kolejny, aby stworzyć nową stawkę.

Przy okazji warto się zastanowić jakie inne wtyczki możemy w ten sposób powielać by uzyskać dodatkowe możliwości…

0

Wprawka do bycia ekspatą

Idea życia jako ekspat pociąga mnie od czasów, kiedy jeszcze nie miałem ku temu jakichkolwiek możliwości praktycznych. Móc sobie jeździć po całym świecie i nie przejmować się specjalnie zarobkami, bo pracować możemy tam gdzie akurat jesteśmy. Brzmi wspaniale, co nie? 🙂

Od ponad roku wszystko czego potrzebuję do pracy to miejsce, gdzie mogę posadzić tyłek, laptop na swoich kolanach i połączenie z internetem. Od przynajmniej pół roku intensywnie macam sobie palcem mapę i wyobrażam, że wyjeżdżam do Nepalu, gdzie do Afryki czy Argentyny. Odwagi by to zrobić jednak wciąż nie mam.

To co teraz napisze zabrzmi śmiesznie w zestawieniu do miejsc, które wymieniłem, ale dziś w nocy wyjeżdżam do Poznania 😉 Mam możliwość zatrzymać się tam na tydzień w hotelu z internetem, nic za to nie płacić i zabieram laptop. Czemu więc by nie sprawdzić w mikroskali jak to jest? Czy faktycznie będę umiał się zorganizować, by zamiast zwiedzać całymi dniami, siedzieć po kilka godzin i 'wordpressić'? W domu znajduję setki powodów by nie brać się do pracy. I zawsze sobie mówię, że jakbym wyjechał, to na pewno będzie inaczej. A więc zobaczymy. Ten tydzień wydaje się nieco luźniejszy, więc wiele nie ryzykuję.

0

Już można tworzyć polskie sklepy internetowe na bazie WordPressa!

Czyż to nie wspaniale? Aż się chce powiedzieć ‚wow’! 😉

Oczywiście przesadzam z tą radością, ale nowość jest. Do tej pory wszyscy miłośnicy WordPressa mieli tylko możliwość skorzystania z jednej z licznych wtyczek do robienia sklepów, ale jedynie z obsługą płatności PayPal lub też w ogóle bez płatności online. Na polskim rynku nie było nic, co by umożliwiało klientom zapłacić na przykład za pomocą mTransferu, czy automatycznej płatności z innych banków. Teraz się to zmieniło!

Jest już wtyczka, dzięki której można zrobić z WordPressa sklep internetowy z prawdziwego zdarzenia. Dodajemy ile chcemy produktów, definiujemy dla nich ile chcemy sposobów dostawy różniących się rodzajem i kosztem. Odwiedzający klika sobie po naszym WordPressie, przegląda produkty, które na nim umieściliśmy, wrzuca do koszyka i idzie płacić.

Wtedy łączy się z Dotpay.pl. Płaci i wraca na naszą blogo-stronę. A my wszystko to widzimy w panelu administracyjnym strony i co więcej dostajemy jeszcze email z informacją o nowym zakupie. Klient też dostaje email, że zostaliśmy poinformowani o zakupie i już bierzemy się do wysyłki. A to wszystko w dużej mierze konfigurowalne!

Dlaczego ja się tym tak zachwycam i stawiam tyle wykrzykników? Cóż, nie będę ukrywał. Taa dam! To ja jestem autorem tej wtyczki 😉

Tym razem nie jest to jakiś taki mini pluginek, a wtyka z prawdziwego zdarzenia. Szesnaście plików jak do tej pory, tysiące linii kodu, pięć czy sześć stron konfiguracyjnych. Kilka miesięcy pisania i testowania.

Pomyślałem, że to wszystko nie zasługuje na wrzucenie gdzieś jako podstrona na moim blogu. Pomyślałem, że taka wtyczka do sklepu internetowego zasługuje na swoją własną stronę internetową. Już nie trzymam dłużej w napięciu: ta strona to tradematik.pl.

A sama wtyczka nazywa się oczywiście TradeMatik 🙂

Na stronie możecie o niej poczytać więcej, możecie się o niej pouczyć albo nawet zajrzeć na forum wtyczki. I co więcej, a nawet przede wszystkim ją tam kupić. Kupić – uznałem bowiem, że wtyczka i tak da Wam miliony złotych zarobku, więc nie jest grzechem pobieranie za nią opłaty, o ileż to niższej niż owe miliony 😉

Ale wiecie co? Ja Was nawet lubię, więc przygotowałem dla Was sztuczkę: każdy, kto wejdzie na stronę wtyczki i dopisze po jej adresie /promo/muzungu będzie mógł kupić ją w promocyjnej cenie 🙂 Żeby nie było zbyt pięknie, promocja taka trwa do niedzieli do północy. Super, nie? 🙂

I tylko nie mówcie nikomu, bo wszystkie paczki wykupią! 😉

0

To ja też napiszę, że wróciłem z WordCampu

Dopiero o 23:00 ale wróciłem.

"Straciliśmy dwa z trzech silników" – takie słowa padły całkiem na poważnie w czasie mojego powrotu z WordCampa. Całe szczęście, że wypowiedział je konduktor w pociągu, a nie pilot w samolocie i całe nieszczęście, że prze to jechaliśmy żółwim tempem.

Ale dojechaliśmy.

Wrażenia?

WordCamp uważam za udany. Największe rozczarowanie to chyba ilość uczestników – na 200 zarejestrowanych zjawiło się około 60 osób. Nie dotarł także jeden prelegent, ale za to w ostatniej chwili zgłosił się nowy.

Byliśmy chwaleni jako organizatorzy za ogarnięcie wszystkiego, więc chyba tu było ok 🙂 Uczestnicy, czego nie zapowiadaliśmy, dostali po kubku i koszulce, identyfikator, który właśnie wszyscy chwalą i torbę z castoramy 😉 Chciałem ogłosić, że casto nie było sponsorem campa.

Przeglądam wpisy innych uczestników, rozmawiałem z wieloma osobiście i co chwila pojawia się kwestia mniejszego lub większego rozczarowania poziomem prezentacji. Muszę przyznać rację; nie do końca się zrozumieliśmy kto na campie się zjawi. Praktycznie nie było treści do zupełnych nowicjuszy, przez to kilka osób wyszła już pierwszego dnia. Za to na sali byli praktycznie sami developerzy stron opartych o WordPress. Moja prezentacja o tworzeniu wtyczek okazała sie przez to dość niepotrzebna – tłumaczyłem oczywiste oczywistości dla ludzi, którzy dawno ten etap mają za sobą. Śledziłem komentarze na blipie (flaker tu kompletnie nawalił; choć było wiele osób, które z flakera znam, na stronie wiało pustkami) i najlepszym przykładem złego dobrania treści do uczestników było zdziwienie oglądających, że we wtyczce nie użyłem MVC 🙂 To ja może skorzystam z okazji i wyjaśnię:

Celem prezentacji było wyjaśnienie jak zrobić prostą wtyczkę pzez osobę, która dopiero raczkuje. Jeśli bym tam wplótł MVC rozmyłbym tylko główny przekaz (cały czas pamiętajcie, że zakładałem, że na sali są nowicjusze). A po drugie…: MVC dla jednego formularza? 😉 Poważnie? Jeśli poważnie w ten sposób piszecie swoje rzeczy, to ja się zastanawiam, gdzie tu jest miejsce na myślenie o wydajności 🙂

Onet

Dzięki onetowi mieliśmy na prezentacji swojego własnego Steve'a Jobsa prezentującego nowy gadżet 🙂 Onet bowiem właśnie nasz camp wybrał na premierę swojego nowego pomysłu, jakim jest blogujacy.pl. To platforma blogowa dla zwykłych użytkowników oparta właśnie o WordPressa. Wypas 🙂

Ludzie

Fajnie było zobaczyć te wszystkie twarze, które znaliśmy do tej pory tylko z avatarów. I dobrym tu pomysłem było zamieszczenie owych avatarów na identyfikatorach, dzięki czemu szybko poznawało się kto jest kto. 

Dobra kończę. O WordCampie będę jeszcze pewnie pisał. Teraz tylko na szybko melduję się wróciłem i idę spać 🙂

0

Zapomniałem powiedzieć, będzie pierwszy polski WordCamp

No tak, to się jakoś mieści w ramach powiedzeń typu szewc bez butów chodzi.

11 i 12 grudnia 2010 w Łodzi odbędzie się WordCamp – spotkanie osób, które w jakiś sposób mają coś wspólnego z WordPressem. Jeśli masz bloga opartego o tę platformę, jeśli tworzysz takie blogi czy strony, jeśli chcesz poznać inne osoby zainteresowane WordPressem a przy okazji dowiedzieć się czegoś nowego, zapraszam 🙂

Tak się składa, że jestem współorganizatorem tego wydarzenia, udzielę także dwóch krótkich wykładów. Tym bardziej wstyd, że choć całość się już organizuje od dawna, to nadal o tym nie napisałem na swoim blogu 🙂

Zatem: widzimy się w Łodzi? 😉

0

Jak dodać widgety do WordPressa z klasą

Pisałem już o tym – nic tak nie wstrzykuje do żył dopaminy jak znalezienie po wielu godzinach szukania rozwiązania jakiegoś problemu 🙂 Zatem właśnie znów jestem pełen dopaminy 😉

Tworząc kolejny WordPressowy plugin postanowiłem zrobić tym razem coś nieco inaczej niż zazwyczaj. Zamiast do tworzenia widgetów użyć wyraźnie oznaczonej jako przestarzała funkcji register_sidebar_widget, postanowiłem zrobić to obecnie polecanym sposobem, czyli przez rozszerzenie klasy WP_Widget.

Znalazłem na sieci tutorial, który niestety jak się okazało nie działa. Dodanie wywołania funkcji register_widget powodowało czystą stronę w oknie przeglądarki. Co ciekawe strona na kodeksie też podaje błędne (jak się okazuje rozwiązanie).

A jakie jest rozwiązanie prawidłowe? Banalne, ale musiałem nieźle się naszukać 🙂 Zamiast wywoływać register_widget() bezpośrednio pakujemy ją w haka akcyjnego ‚widgets_init’. Czyli – zakladając, że nasza klasa widgeta nazywa się ‚NaszWidget’, aktywujemy ją w ten sposób:

add_action('widgets_init', 'NaszInit');
function NaszInit() {
register_widget('NaszWidget');
}
0

Wykluczenie strony z menu – WordPress

Chyba będę raz na jakiś czas wrzucał tutaj tip&tricks do zastosowania przy zabawach z api WordPressa. Blogów na ten temat jest wiele i nie mam zamiaru z nimi konkurować. Dlatego kryterium wrzucania będzie takie: jeśli długo szukałem jakiegoś rozwiązania i nie mogłem znaleźć, jeśli znalazłem, czuję, że mi się jeszcze przyda, a boję się, że szybko to zapomnę – wyląduje to tutaj. Taki publiczny notes ze snippetami, który być może pomoże i części z Was.

Pracuję obecnie nad pluginem do tworzenia sklepów internetowych. Wiem, że mam już WP Sprzedawcę. Ten plugin będzie sobie istniał, ale jako właśnie taki skromny, do szczególnych zastosowań. Równolegle mam zamiar wydać duży plugin, który pozwoli tworzyć sklepy internetowe na bazie WordPressa, dostosowany do polskich realiów. Ale do rzeczy.

Plugin instalując się tworzy specjalne strony: na koszyk, na wprowadzenie danych odnośnie wysyłki przez klienta… Tej ostatniej lepiej, żeby nie było w menu na stronie. Jak tego dokonać?

Domyślnie menu jest produkowane przez funkcje wp_list_pages() umieszczoną w skórce. Można do niej przekazać parametr exclude=3 co wykluczy z menu stronę o ID równym ‚3’. Czy jest jednak sposób by wp_list_pages() zawsze wykluczało jakąś stronę, tak byśmy w instrukcji instalacji naszego plugina nie musieli pisać „po zainstalowaniu otwórz wszystkie pliki skórki i zamień każde wystąpienie funkcji wp_list_pages() na …”? Takie podejście trzeba przyznać nie byłoby rzeczą wspaniałą, nie zmuszajmy użytkownika systemu CMS do grzebania w jego kodzie!

Długo szukałem i znalazłem. Niestety nie ma żadnego filter haka czy action haka na tę funkcję. wp_list_pages korzysta jednak do pobrania listy stron z funkcji get_pages(), którą już z kolei filtrować możemy.

Zatem wszystko co musimy zrobić to przefiltrować funkcję get_pages() i ze zwracanej przez nią tablicy wyciąć ten element, który zawiera obiekt o ID równym ‚3’ (brzmi złożonie, ale przeczytajcie opis funkcji, aby zrozumieć jaki rodzaj danych zwraca; jest to tablica obiektów, każdy obiekt ma pola odpowiadające nazwom kolumn z tabeli stron w bazie danych).

Na nasze nieszczęście (ale niewielkie) funkcja get_pages() używana jest nie tylko przy tworzeniu menu stron, ale na przykład także w panelu admina. Szkoda by było jakby także tam zniknęła nam nasza strona. Zatem musimy do naszej funkcji, zanim jeszcze tablica pozbawiana wykluczanej strony, dodać warunek aby pozbawianie to nie odbywało się, jeśli funkcja wywoływana jest w panelu administracyjnym WordPressa.

OK, wiemy już wszystko.

Najpierw dodajemy filtr.

add_filter('get_pages', 'usun_strone');

Następnie tworzymy naszą funkcję usun_strone(), która jako parametr otrzymuje tablice stron.

function usun_strone($pages) {

}

W bloku funkcji wstawiamy najpierw warunek sprawdzający czy to panel administracyjny i jeśli tak – przerywamy działanie funkcji zwracając tablicę stron z powrotem w niezmienionej postaci.

$to_wp_admin = ( ( defined( 'WP_ADMIN' ) && WP_ADMIN == true ) 
|| ( strpos( $_SERVER[ 'PHP_SELF' ], 'wp-admin' ) !== false ) );
if ( $to_wp_admin ) return $pages;

Jeśli jednak nie jest to Kokpit, zróbmy pętle na tablicy stron, sprawdźmy czy ID jest równe trzy i jeśli nie, dodajmy element tablicy do nowej tablicy, a potem ją zwróćmy.

$new_pages = array();
foreach ($pages as $page) {
 if ($page->ID == '3') {
  continue;
  }
 else {
  $new_pages[] = $page;
  }
 }

return $new_pages;

To wszystko.

Przy okazji mam pytanie do Was: czy jest jakiś sposób aby w bloku funkcji sprawdzić przez jaką funkcję jest dana funkcja wywołana? Ja niestety nie znam takiego, ale pomyślałem, że fajnie by było, gdyby taka możliwość była. W powyższym kodzie nie musielibyśmy sprawdzać czy get_pages() jest wywoływane w panelu admina, czy jeszcze jakoś inaczej, a zrobilibyśmy warunek „jeśli funkcja ta jest wywoływana przez wp_list_pages(), tylko wtedy usuń stronę o ID równym 3”.

Zna ktoś taki sposób? Czekam na Wasze komentarze.

0

O kurczaki, mój blog nie jest mój!

To będzie wpis o tym, że jak instalujesz mnóstwo pluginów i skórek do WordPressa, któregoś dnia może się okazać, że zostałeś zhakowany.

Niewiele osób wie jak wiele może zrobić twórca skórek czy pluginów do WordPressa (ale od razu mówię – ten tekst mógłby być o dowolnym systemie CMS), w tym także jak wiele złych rzeczy może zrobić.

Wyobraź sobie, że znajdujesz w sieci rewelacyjny plugin, który sprawi, że – wymyślam na poczekaniu – pod twoimi wpisami będą pojawiać się wpisy z nim powiązane. Instalujesz go i faktycznie – pod każdym wpisem pojawiają się odnośniki do innych wpisów z Twojego bloga. Plugin więc spełnia swoje działanie.

Tymczasem jednak twoja strona z dnia na dzień zostaje wyrzucona z indeksu Googla. Osoby, które zamieściły kiedykolwiek komentarz na Twoim blogu (a więc także podały swój adres email) codziennie z Twojej domeny dostają dziesiątki spamów. Któregoś dnia nie możesz zalogować się do panelu administracyjnego, a za kilka kolejnych dni znikają Twoje wszystkie wpisy, a zamiast nich blog jest pełen reklam viagry i podrabianych roleksów. Twój blog nie jest już twój.

Brzmi nieprawdopodobnie? Uwierzcie mi, że jest to jak najbardziej możliwe, a co więcej właściciel sam jest sobie winien doprowadzenia do takiej sytuacji. I to niezależnie od tego czy korzystamy z WordPressa, Joomli, Drupala czy czegokolwiek innego. Ja akurat piszę o WordPressie, bo nim się zajmuję.

Częścią z moich zadań jest właśnie ratowanie blogów z podobnych opresji jak te opisane wyżej. Widziałem już w kodach pluginów, skórek (skórka to tak naprawdę z grubsza także plugin) czy też innych dodatków wiele mniej lub bardziej zaevalowanych instrukcji, które mają za zadanie po cichu zrobić krzywdę właścicielowi strony (a właściwie raczej przynieść korzyść twórcy dodatku kosztem właściciela strony).

Dowolny plugin czy skórka poza robieniem tego, do czego zostały stworzone według opisu na stronie dodatku może w ukryciu robić dosłownie wszystko z Twoją stroną. Najczęściej ogranicza to się do z pozoru niewinnego dodawania odnośników pozycjonujących w stopce strony, jednak i takie działanie czasami może dla nas źle się skończyć – Google potrafi wyrzucić ze swojego indeksu takie strony, zwłaszcza jeśli inne odnośniki w  stopce są serwowane dla czytelników strony, a inne dla robota google. Czy tak się właśnie dzieje, przeciętny użytkownik wordpressa jednak wiedzieć nie może.

Na szczęście jest kilka mniej lub bardziej prostych sposobów aby ustrzec się przed zhakowaniem naszej strony w ten sposób. Oto one.

  • Nie instaluj wszystkiego co znajdziesz w sieci! Jeśli tak robisz, aż się prosisz o kłopoty. Ja jeśli znajduję jakiś nowy plugin najczęściej czytam jego kod aby zobaczyć co mniej więcej robi, potem instaluje na wordpressie testowym i dopiero wtedy – jeśli zdecyduje, że jego funkcjonalności są mi przydatne – ląduje on na muzungu.pl
  • Jeśli szukasz pluginów lub skórek, szukaj ich w pierwszej kolejności w repozytorium WordPressa. Teoretycznie zanim autor wtyczki/pluginu doda go do owego repozytorium, administrator serwera przegląda jego kod w poszukiwaniu niebezpiecznych jego fragmentów, a zatem jesteśmy nieco bezpieczniejsi. (Niestety nie jest to zabezpieczenie doskonałe, bo złośliwy kod i w takiej sytuacji da się przemycić)
  • Jeśli już musisz zainstalować coś spoza repozytorium, wybieraj skórki i pluginy bardziej popularne, których autor jawnie podpisuje się pod swoim dziełem. Taka osoba raczej nie odważy się na próbę wstrzyknięcia złośliwego kodu i utratę reputacji.
  • Przynajmniej pobieżnie obejrzyj kod wszystkich plików składających się na skórkę lub plugin. Otwórz je przed instalacją choćby zwykłym notatnikiem i wyszukaj frazy ‚eval’ i ‚base64_decode’. Jeśli je znajdziesz, zrezygnuj z instalacji (jednak ich obecność nie musi oczywiście od razu oznaczać złych intencji twórcy).

Nie byłbym sobą, jeśli nie pozwoliłbym bym sobie na małą reklamę 🙂 Jeśli nie jesteś pewien czy twoja skórka i zainstalowane już pluginy są bezpieczne, napisz do mnie a za opłatą zajmę się takim audytem. Jeśli nie chcesz mi tego zlecać, proponuję dodać takie ogłoszenie na WPzlecenia.pl – na pewno ktoś się tym zajmie.

W jednym z kolejnych wpisów opiszę w jaki sposób ratować wordpressa gdy został już zarażony. Nie  jest to zadanie proste, jednak wykonalne. Nie zapomnij dodać do swojego czytnika mojego kanału RSS aby nie przegapić tego zapowiadanego wpisu 🙂

0

Plugin do WordPressa – dodawanie pustych linii do wpisów

Plugin jest tak mały (plik readme jest dluzszy niż sam kod pluginu), że nie zasługuje na więcej niż kilka zdań.  Zrobiłem go w czasie pracy nad jedną ze stron, a że problem przewija się wiele razy w Google bez rozwiązań, postanowiłem wydać plugin dla wszystkich.

Strona pluginu. Niedługo będzie też na WordPress.org tutaj.

0