Tag: wordpress

Tworzenie pluginów do WordPressa – cz. 2 – instalator, bazy danych i Custom Fields

To jest druga część mojego nibykursu tworzenia pluginów do WordPressa. Część poprzednia znajduje się tutaj.

W ostatnim tygodniu zrobiłem chyba z cztery pluginy, nie wszystkie opublikowałem, ale jak obiecałem, drugą część kursu oprę na moim małym pluginie do dodawania filmów z YouTube do naszych wpisów. Nawiasem mówić zdziwiłem się, że jest tak popularny. Bo jakby nie było podobnych pluginów jest całkiem sporo. Ale nic, sukces mnie cieszy (prawie 700 pobrań w niecały tydzień) i właśnie wczoraj opublikowałem jego drugą wersję.

* * *

Wtrącenie reklamowe: być może na ten wpis trafią osoby, które potrzebują jakiegoś plugina, chcą go zrobić, ale się poddadzą, bo uznają, że jest to dla nich za trudne. W takim wypadku uprzejmie zawiadamiam, że za opłatą chętnie zrobię taki plugin 😉 Jak się ze mną można skontaktować opisane jest tutaj.

* * *

No to lecimy. Najpierw założęnia:

  • Plugin ma umożliwiać dodanie filmu z YT do wpisu. W tym celu osoba pisząca wpis będzie musiała dodać pod wpisem Custem Field (Pole Własne) o nazwie video i w pole wartości mające wpisane odnośnik do filmu na YouTube
  • Plugin ma wyświetlać pod wpisem film, jeśli w pole Custom Field wpisane są powyższe wartości.
  • Plugin ma umożliwiać wyświetlenie w dowolnym miejscu ostatnio dodany film. Ma też umożliwiać wyświetlenie ostatnio dodany film konkretnego użytkownika WordPressa. W tym celu stworzymy odpowiednią funkcję ( u mnie będzie się nazywać show_LastYT() ) która jako parametr może przyjąć ID użytkownika, którego film chcemy zobaczyć.
  • Plugin ma do wpisów zawierających film dodawać automatycznie tag video.

I tyle. Informację o filmie będziemy trzymać w polu Custom Field. Dzięki temu silnik WordPressa w odpowiednim momencie sam włoży i sam wyjmie z bazy danych potrzebne nam informacje.

Natomiast aby przyspieszyć działanie, sami stworzymy tabelę w bazie MySQL przechowującą informację o ostatnim filmie. Można to oczywiście zrobić inaczej: wystarczy tak stworzyć funkcje show_LastYT(), że przy jej wywołaniu będzie przeglądać wszystkie wpisy, szukać tych zawierających odpowiednie Custom Field, sortować by najnowsze były na górze, wybierać ID usera… Uh, będzie to pewnie trwało długo, jeśli wpisów będziemy mieli setki lub tysiące. Lepiej jednak faktycznie stwórzmy osobną tabelę zawierającą tylko dwie kolumny: ID pozycji w tabeli (po tym będziemy sortować) i ciąg składający się z ID usera, który dodał film do bazy, dwukropka (jako rozdzielnika) i kodu filmu po nim. (przykładowo: 6:vxsz0fgds).

Co musimy umieścić w naszym pluginie?

  • Nagłówek opisujący plugin – nie będę tego już opisywał, bo opisałem w poprzedniej części.
  • Funkcję instalującą plugin (i odpowiedni do niej hook), która zostanie wywołana tylko raz, jak plugin będzie instalowany i stworzy odpowiednią tabelę w bazie danych.
  • Funkcję dodającą pozycję do bazy danych i tag video do wpisu, w momencie gdy user publikuje lub aktualizuje wpis zawierający odnośnik do filmu (tu zatem też będzie potrzebny odpowiedni hook)
  • Wreszcie funkcję wyświetlającą film na końcu wpisu, jeśli film jest w Custom Field (i znowu będzie potrzebny odpowiedni hook).
  • Na końcu funkcję show_LastYT() bez hooka wyświetlającą kod ostatnio dodanego filmu. Hook nie jest potrzebny bo to autor bloga sam w skórce graficznej zdecyduje gdzie ta funkcja ma być wywołana (np w sidebarze).

Kod będzie wyglądał następująco (pomijając nagłówek).

Funkcja instalująca:

function yt_install () {
	global $wpdb;
	$prefix = $wpdb->prefix;
	$yt_tablename = $prefix."yt_videos";
	
	$yt_db_version = "1.0";
	
	if ($wpdb->get_var("SHOW TABLES LIKE '".$yt_tablename."'") != $yt_tablename) {
		$zapytanie = "CREATE TABLE ".$yt_tablename." (
		id mediumint(9) NOT NULL AUTO_INCREMENT,
		video_id varchar(120) NOT NULL,
		PRIMARY KEY  (id)
		);";
		
		$wpdb->query($zapytanie);
		
		add_option("yt_db_version", $yt_db_version);
		
		}
	}

Co się stało się? Najpierw globalizujemy zmienną klasową $wpdb. Klasa ta dostarcza bardzo wiele funkcji służących do obsługi bazy danych.

W kolejnej linijce widzimy sposób jej wykorzystania: $wpdb->prefix pobiera przedrostek jakim są poprzedzone nazwy tabel w bazie danych. Domyślnie przedrostek ten to “wp_”, ale każdy może sobie go przecież zmienić (ja na przykład tak robię, dzięki czemu w jednej bazie danych mogę trzymać kilka instalacji WordPressa), więc odwołujmy się do niego właśnie w ten sposób jak powyżej.

Następnie tworzymy nazwę naszej tabeli, w której będziemy trzymać informacje o ostatnio dodanym filmie. Nazwa ta to ma być przedrostek_yt_videos zatem tworzymy ją jako $prefix.”yt_videos”.

Dalej definiujemy numer wersji naszej tabeli. Nie jest to konieczne, ale wyobraź sobie sytuację, gdy w przyszłych wersjach pluginu będziesz chciał przekonstruować tabelę, by zawierała więcej informacji (np nowe kolumny). Dlatego warto teraz podać informację, że obecna tabela została przez Ciebie oznaczona jako wersja 1.0, a jeśli w przyszłości będziesz zmieniać strukturę tej tabeli, nadamy jej kolejny numer i odpowiednio to obsłużymy (na razie nie będę pisał jak to się robi).

Okej, teraz przyszła kolej na dodanie tabeli do bazy danych. Ale uwaga, najpierw musimy sprawdzić czy tabela już nie istnieje. Bo co jeśli ktoś poużywa naszego pluginu, odinstaluje go i zainstaluje jeszcze raz? Ponowne tworzenie tabeli o tej samej nazwie na pewno nie skończy się niczym dobrym.

Dlatego tworzenie tabeli zaczynamy od sprawdzenia (warunek if) czy nie ma już takiej tabeli. W tym celu wykorzystujemy kolejną metodę $wpdb->get_var(). get_var() pobiera z bazy jedną konkretną wartość i jako parametr przyjmuj zapytanie. Pytamy więc bazę czy potrafi nam pokazać tabelę, której nazwa jest taka sama jak nasza tabela, którą chcemy utworzyć. Jeśli jest już, get_var() zwróci nam w tym przypadku nazwę naszej tabeli, jeśli nie ma, zwróci pusty string (albo NULL, dokładnie nie wiem). Porównujemy zwróconą wartość ze zdefiniowaną nazwą tabeli i jeśli są różne, możemy dodać naszą tabelę bez obaw.

Konstruujemy więc zapytanie (jako $zapytanie) i w metodzie $wpdb->query() przekazujemy je do bazy danych. Zapytanie utworzy nam tabelę.

Nie zapomnijmy też przy instalacji pluginu poinformować WordPressa co mamy w zmiennej $yt_db_version. W tym celu korzystamy z mechanizmu opcji, konkretnie z funkcji dodającej opcję do bazy danych add_option(), która jako pierwszy parametr przyjmuje nazwę opcji pod jaką nasza dodana wartość ma się znaleźć w mechanizmie WordPressa, a jako drugi ową wartość. Krócej można więc to było zapisać add_option(“yt_db_version”, “1.0”).

Funkcja jest już gotowa. Musimy teraz nauczyć WordPressa kiedy jej ma używać. Użyć ma jej tylko raz, tylko przy instalacji pluginu. W tym celu wpisujemy hooka:

register_activation_hook(__FILE__, 'yt_install');

Na ludzki język hak ten mówi: “zarejestruj hak aktywacyjny, który przy instalacji pliku z tym pluginem (__FILE__) wywoła funkcję “yt_install”. Zwróć uwagę na podwójne znaki podkreślenia przed i po FILE.

OK, tabelę w bazie mamy już stworzoną, możemy więc zająć się napisaniem funkcji dodającej odpowiedni wpis do bazy, gdy ktoś zamieści nowy wpis z Custom Field. Funkcję taką nazwijmy yt_database() i będzie ona wyglądała tak:

function yt_database ($post_id) {
	global $post;
	$czy_maVideo = get_post_meta($post_id, "video", true);
	
	if ($czy_maVideo != "") {
		global $wpdb;
		$prefix = $wpdb->prefix;
		$yt_tablename = $prefix."yt_videos";
		
		/* $url = explode("?", $czy_maVideo);
		$url = $url[1];
		$url = explode("&", $url);
		$url = $url[0];
		$url = explode("=", $url);
		$video_id = $url[1]; */
		
		$url = parse_url($czy_maVideo, PHP_URL_QUERY);
		$url = explode("&", $url);
		foreach ($url as $parka) {
			if (substr($parka, 0, 2) == "v=") {
				$konkretnaParka = explode("=", $parka);
				$video_id = $konkretnaParka[1];
				break;
				}
			}
		
		
		$poscik = get_post($post_id);
		
		$ktododal = $poscik->post_author;
		
		$wstawka = $ktododal.":".$video_id;
		
		$zapisz_video = "INSERT INTO ".$yt_tablename." (video_id) VALUES ('".$wstawka."');";
		
		$rezultat = $wpdb->query($zapisz_video);
		
		wp_add_post_tags($post_id, 'video');
		
		}
	
	}

Całkiem długa, więc zobaczmy co takiego robi. Jak widać funkcja pobiera argument, którym jest ID wpisu, na którym ma być wykonana. Zglobalizujmy więc najpierw zmienną $post, którą poznaliśmy już w poprzedniej części kursu, by móc do niej się odnieść.

W następnej linijce sprawdzamy czy wpis, który jest właśnie publikowany zawiera pole Custom Field o wartości “video”. Odpowiada za to funkcja $get_post_meta(), która jako pierwszy argument pobiera ID wpisu, który ma sprawdzić, w drugim argumencie wpisujemy jak ma się nazywać pole Custom Field, którego szukamy i trzeci argument ustawiamy na TRUE jeśli chcemy aby funkcja zwróciła nam zawartość tego pola Custom Field. Może i skomplikowane, ale teraz mamy już w zmiennej $czy_maVideo zapamiętany URL do YouTube jaki autor wpisu wpisał w pole Custom Field. Zaraz będziemy go obrabiać.

O właśnie teraz. Sprawdźmy czy zmienna z URLem nie jest przypadkiem pusta i jeśli nie jest wyciągnijmy z niej identyfikator filmu w serwisie youtube. Pierwsze trzy linijki if-a już znamy – ponownie dobieramy się do $wpdb i ustawiamy nazwę tabeli, bo przecież w naszej tabeli będziemy chcieli zapisać wartość “id_usera:_id_filmu”.

Następnie musimy wyciągnąć z wpisanego URL-a fragment zawierający identyfikator filmu. Przypominam, że cały url do filmu w YT wygląda mniej więcej tak:

http://www.youtube.com/?v=id_filmu&kolejny=parametr&…

Czyli musimy wygrzebać co jest po “v=”

Specjalnie w kodzie zostawiłem zakomentowaną sekcję. Zawiera ona fragment kodu, którym wyciągałem id filmu na początku. Działało, pod warunkiem, że parametr v pojawiał się jako pierwszy parametr w URLu. Tak jest chyba zawsze, no ale właśnie: “chyba”. Jakby ktoś wkleił jakiś przekonstruowany URL, mogłoby to nie zadziałać.

Zatem napisałem całość od nowa, oparte o funkcje parse_url i dwie eksplozje. Mam nadzieję, że jest to dla Was zrozumiałe, bo to zwykły kod produkujący zmienną $video_id korzystając z podstawowych funkcji języka PHP. A zakładam, że kurs czytają osoby, które przynajmniej podstawy PHP znają 🙂

OK, mamy już identyfikator filmu, potrzeba nam jeszcze ID autora, który właśnie dodał ten film. W tym celu pobieramy zaczep do postu, który właśnie obrabiamy (funkcja get_post() przyjmująca jako parametr id owego postu). Mając już utworzony obiekt postu możemy dobrać się do jego zawartości. Zawiera on między innymi ID autora zapisany pod zmienną $post_author.

No i wyciągania danych już koniec. Mamy id filmu i mamy id autora wpisu. Sklejamy to w zmiennej $wstawka i następnie wstawiamy do naszej tabeli. Tu oczywiście korzystamy z $wpdb i jego poznanej już metody query().

Ostatnia linijka to automatyczne dodawanie tagu “video” do wpisu. Odpowiada za to kolejna wordpressowa funkcja wp_add_post_tags() pobierająca jako argumenty id postu, do którego ma dokleić tag oraz tagi (można wpisać kilka rozdzielonych przecinkami) jakie mają do posta zostać dodane. Warto tu nadmienić, że jak większość funkcji wordpressa i ta jest w miarę inteligentna: jeśli wpis już zawiera dany tag, funkcja go nie doda ponownie.

Koniec funkcji. Teraz musimy powiedzieć wordpressowi kiedy funkcja ma zostać wykonana. Oczywiście funkcja musi zostać wykonana gdy WordPress będzie wykonywał akcję polegającą na publikacji nowo utworzonego wpisu. Odpowiada za to hook add_action o następującej treści:

add_action('publish_post', 'yt_database');

Mówi on: WordPressie – gdy wykonujesz akcję polegającą na publikacji wpisu, wykonaj funkcję yt_database(). Warto tu nadmienić, że akcja “publish_post” oznacza nie tylko publikację posta, ale także jego aktualizację.

(Tu od razu wychodzi niedociągnięcie mojego pluginu, polegające na tym, że jak ktoś zaktualizuje wpis, to plugin ponownie zapisze w bazie danych id_usera:id_filmu. Ale uznałem, że skoro to wersja 0.2, poprawię to w przyszłości dodając funkcje sprawdzające czy już dany wpis w bazie nie istnieje)

OK, co nam jeszcze zostało? Dwie rzeczy: wyświetlanie filmu we wpisie (do tej pory nie poinformowaliśmy wordpressa, że ma to robić, a sam z siebie nie jest na tyle inteligentny by wiedzieć, że jak post ma Custom Field wpisany url do YT to na pewno ten film trzeba wyświetlić) oraz wyświetlanie ostatnio dodanego filmu.

Niepotrzebnie rozbiłem to na dwie funkcje, ale skoro już tak jest, to na razie o zostawmy. Lecimy z pierwszą funkcją, czyli doklejaniem filmu na końcu wpisu.

function add_ytVideo ($content) {
	global $post;
	$czy_maVideo = get_post_meta($post->ID, "video", true);
	
	if ($czy_maVideo != "") {
		
		/* $url = explode("?", $czy_maVideo);
		$url = $url[1];
		$url = explode("&", $url);
		$url = $url[0];
		$url = explode("=", $url);
		$video_id = $url[1]; */
		
		$url = parse_url($czy_maVideo, PHP_URL_QUERY);
		$url = explode("&", $url);
		foreach ($url as $parka) {
			if (substr($parka, 0, 2) == "v=") {
				$konkretnaParka = explode("=", $parka);
				$video_id = $konkretnaParka[1];
				break;
				}
			}

	
			return $content.'
			<object width="425" height="344">
			 <param name="movie" 
			  value="http://www.youtube.com/v/'.$video_id.'&hl=pl&fs=1&">
			 </param>
			 <param name="allowFullScreen" 
			  value="true"></param>
			 <param name="allowscriptaccess" value="always"></param>
			 <embed 
			  src="http://www.youtube.com/v/'.$video_id.'&hl=pl&fs=1&" 
			  type="application/x-shockwave-flash" 
			  allowscriptaccess="always" allowfullscreen="true" 
			  width="425" height="344"></embed>
			</object>';
		
		}
	
	
	else return $content;
	
	}

Funkcja ta jest bardzo podobna do poprzedniej. Szczerze, to aż za podobna. Różni się tylko tym, że jako parametr pobiera $content w którym będzie przekazana standardowa zawartość wpisu, a na końcu zwróci albo samą zawartość wpisu (jeśli wpis nie zawiera odpowiedniego Custom Field) albo zawartość wpisu z doklejonym kodem youtubowej flashki, wcześniej w odpowiednie miejsca podstawiając $video_id filmu.

Jak widać reszta jest bardzo podobna, a nawet – jak się spojrzy na powtórne parsowanie URLa – od razu przychodzi na myśl, że nigdy nie słyszałem o osuszaniu kodu 😉 Oj słyszalem, tyle, że jestem bardziej guerilla developerem niż kimś poukładanym 🙂 Najpierw tworzę kod, a potem biorę się za jego optymalizację i czyszczenie.

OK, dość tego filozofowania. Powiedzmy wordpressowi by naszą funkcję wykonał w momencie wyświetlania wpisu. Za to odpowiada znany już nam z poprzedniej części hook polegający na przefiltrowaniu wypluwanej zawartości wpisu:

add_filter('the_content', 'add_ytVideo');

No i końcówka: tworzymy funkcję show_LastYT() pokazującą ostatni film dodany do bazy.

function show_LastYT ($user='')  {
	
	// shows last YT video added to post
	global $wpdb;
	$prefix = $wpdb->prefix;
	$yt_tablename = $prefix."yt_videos";
	
	if ($user == '') {
	
	$zapytanie = "SELECT video_id FROM  ".$yt_tablename." ORDER BY id DESC LIMIT 0, 1;";
	
	$wynik = $wpdb->get_var($zapytanie);
	
	if ($wynik != "") {
		
	$wynik = explode(":", $wynik);
	
	$wynik = $wynik[1];
	
	}
	}
	
	else {
		$zapytanie = "SELECT video_id FROM  ".$yt_tablename." ORDER BY id DESC;";
		$wyniki = $wpdb->get_results($zapytanie, ARRAY_A);
		
		foreach ($wyniki as $wynik) {
			$wynik = explode(":", $wynik['video_id']);
			$czyTenUser = $wynik[0];
			$wynik = $wynik[1];
			if ($czyTenUser == $user) {
				break;
				}
			}
		
		}
	
	
	
	echo '
	<object width="378" height="305">
	 <param name="movie" value="http://www.youtube.com/v/'.$wynik.'&hl=pl&fs=1&">
	 </param>
	 <param name="allowFullScreen" value="true">
	 </param>
	 <param name="allowscriptaccess" value="always">
	 </param>
	 <embed src="http://www.youtube.com/v/'.$wynik.'&hl=pl&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="378" height="305">
	 </embed>
	</object>
	';
	
		}

Funkcji tej nie będę tłumaczył, bo nie zawiera nic nowego odnośnie API wordpressa. W skrócie: pobiera parametr w postaci ID usera, którego chcemy przeszukać (domyślnie szuka we wszystkich filmach) i wypluwa kod odpowiedzialny za wyświetlenie flashki ze znalezionym ostatnim filmem.

Funkcji nie hookujemy, bo to autor bloga ma sam zdecydować gdzie chce aby była wykonana. Np jeśli chce aby filmik pokazywał się w sidebarze, musi w temacie graficznym w pliku sidebar.php wpisać:

<?php show_LastYT(); ?>

Ewentualnie podając jako parametr ID usera, którego chce wyświetlić.

No i tyle. Plugin już powinien działać. A jeśli ktoś nie wierzy, zapraszam do pobierania 🙂

Ciąg dalszy

Zobacz trzecią część kursu

0

Kolejny mój plugin: Upgrade Notification by Email

Spłodziłem kolejny mały (płodzenie zajęło mniej niż godzinę) plugin do WordPressa. Właściwie napisałem go dla siebie, ale podejrzewam, że wielu z Was się przyda.

Plugin po zainstalowaniu raz na dobę będzie sprawdzał czy jest na stronie WordPressa nowsza wersja tego oprogramowania niż mamy zainstalowana i jeśli tak, wyśle nam maila z informacją o tym.

Banał, wiem. Wiem też, że takie info mamy przecież w panelu admina. Dlatego plugin nie jest dla wszystkich. Jest dla tych, którzy albo nie logują się do swojego panelu zbyt często, albo mają dużą ilość instalacji WordPressa pod kontrolą.

Strona pluginu jest tutaj. Po angielsku (a może angielskawu, jeśli ktoś widzi tam błędy językowe, proszę o cynk) bo mam zamiar wypłynąć tym pluginem na wody międzynarodowe. Niedługo plug będzie dostępny prez stronę WordPressa (fiu, fiu).

Aha, ten plugin jest za darmo. Jest lekki (wywoływany jest raz na dobę i nie przetwarza zbyt wiele danych), więc można śmiało instalować. Chciałoby się powiedzieć: będzie to jeden z najpopularniejszych pluginów wśród osób intensywnie wykorzystujących oprogramowanie WordPressa 😉

Update: plugin jest już w repozytoriach WordPressa 🙂

http://wordpress.org/extend/plugins/upgrade-notification-by-email/

0

WP Sprzedawca 0.3 – ostatnia wersja rozwojowa – wprowadza dostęp do wpisów za opłatą

Wersja 0.3 wydana i jest to zarazem ostatnia wersja przed wydaniem 1.0.

Od tej pory do wersji 1.0 będę tylko wprowadzał zmiany kosmetyczne (przeniesienie konfiguracji z edytowania pliku do menu admina, inne poprawki). Niemal na pewno nie będę wprowadzał nowych funkcjonalności; te pojawią się jako przygotowanie do wersji 2.0.

Plugin jest darmowy dla osób, które pobrały wersję 0.2. Te osoby proszę o kontakt na priv podając nr telefonu (jeśli pobierały smsem) lub adres email jaki wpisały (jeśli pobierały płacąc przelewem). Osoby, które pobrały smsem proszę o podanie też emaila na który wyślę paczkę z pluginem 🙂

Pozostałe osoby – te które mają jeszcze wersję 0.1 lub nie mają żadnej – muszą przygotować się na potężny wydatek kilku złotych! 😉

Uwaga: osoby, które kupią wersję 0.3 kolejne aktualizacje aż do 1.0 będą otrzymywać za darmo.

CO NOWEGO?

* Dodano możliwość ukrycia treści wpisów tak aby były dostępne za opłatą. Bez wprowadzenia opłaty wyświetla się tylko tytuł wpisu, elementy opisowe (tagi, nazwa kategorii, data publikacji itp), komentarze pod nim oraz zdefiniowana przez autora ilość akapitów (domyślnie = 0).
* Możliwość konfiguracji przez ile dni (liczone w sekundach) po wykupieniu płatnego dostępu wpisy będą widoczne czytelnikowi.
* Rozpoczęto przenoszenie konfiguracji z edytowania pliku .php do panelu administracyjnego. Obecnie w panelu w sekcji WP Sprzedawca > Ustawienia Dotpay należy podać swój nr ID w serwisie Dotpay

Plugin WP Sprzedawca 0.3 możesz pobrać stąd.

0

WP Sprzedawca 0.2 z obsługą kart i e-przelewów

OK, tak jak zapowiadałem, zaktualizowałem swój super hiper plugin do obsługi płatności na WordPressie (i zmieniłem jego nazwę). Wszelkie szczegóły, jak i możliwość pobrania pluginu są na stronie z pluginami oczywiście.

Jakie są najważniejsze nowości?

  • Plugin przestał się idiotycznie nazywać WP Dotpay Autokody SMS, a nazywa się teraz WP Sprzedawca. Może i pierwsza nazwa określała dokładnie co robi plugin, ale raz, że nawet ja jej nie potrafiłem zapamiętać, a dwa, że dodawanie nowych funkcji powodowało, że nazwa już nie była adekwatna. Wymyśliłem więc nazwę szeroką, ale nadal określającą w miarę dobrze czym plugin jest i co najważniejsze łatwą do zapamiętania. Teraz jak ktoś Was zapyta jaki plugin pozwala na stworzenie polskiego sklepu na bazie wordpressa, od razu z pamięci odpowiecie: “WP Sprzedawca” 😉
  • Dodałem ponad 150 linii kodu (poprzednia wersja miała ich około 60). A to wszystko po to, aby wprowadzić obsługę płatności kartą kredytową i eprzelewem (mTransfer, Inteligo itp itd). Teraz plugin jest już pluginem pełną gębą. Korzyści mają wszyscy: odwiedzający blog może zapłacić za Twój content jak chce, a nie tylko sms-em. Ty, jako autor contentu zarobisz na nim więcej (prowizja Dotpay za sms to aż ponad 50% jego wartości, podczas gdy prowizja za e przelew to około 4,5% – różnica olbrzymia)
  • Cena wzrosła. Przede wszystkim dlatego, że Dotpay nie przyjmuje eprzelewów niższych niż 5 złotych; zatem cenę ustaliłem właśnie na 5 złotych (a cenę w opcji SMS Premium tak podniosłem, byście jednak płacili przelewami). Ale chyba warto wydać te 2 złote więcej, zwłaszcza, że dzięki temu pluginowi zarobicie więcej, niż dzięki wersji 0.1, która pozwalała tylko na średnio opłacalne płacenie SMSem Premium.
0

Błąd ciasteczek w WordPressie

Uff, jestem właśnie po 4 godzinach kodowania mojego pluginu do WordPressa. Już zrobione, co miało być zrobione, ale nie mam siły aktualizować dokumentacji. Zrobię to rano i dlatego póki co stronę z pluginem ukrywam na razie.

Ale ja nie o tym. Większość kodowania to było tak naprawdę grzebanie po necie czemu coś, co na Codeksie jest opisane, że działa, tak naprawdę nie działa.

Od jakiegoś już czasu podejrzewałem, że WordPress ma problemy z obsługą cookies i właśnie wyszło mi to na jaw. Jeśli ktoś z Was też zauważył lub zauważy, że ciasteczko wstawione przez setcookie() tak naprawdę nie istnieje, to mam rozwiązanie:

W WordPressie gdy wstawiamy ciasteczko musimy podać także parametry “path” i “domain”. Dziwne, ale naprawdę wtedy zaczyna to działać jak należy 🙂

Zatem zgrabny (i przenośny) kod wstawiający ciastko dla WordPressa powinien wyglądać:

setcookie('nazwa ciastka', 'wartość', 'czas życia', "/", str_replace('http://www','',get_bloginfo('url')));

I tyle. Działa, ale ile się musiałem naszukać 🙂 No ale przecież ja to lubię 😉

0

Udostępnianie plików za opłatą SMS Premium – plugin do WordPress

Długo się zastanawiałem jakich jeszcze pluginów do WordPressa brakuje (bo wydawać by się mogło, że już wszystko w WP da się zrobić) i traf chciał, że znalazłem wątek na Goldenline, w którym ktoś pytał i Mikropłatności w WordPress. Tak aby można było udostępniać pewne elementy WordPressa (np publikajcę wpisów, czytanie wpisów, zakładanie konta) lub pliki (e-booki, muzykę, własne programy etc) za opłatą.

Rozwiązania są, ale w oparciu o PayPal, czyli raczej dla osób chcących coś sprzedawać dla ludzi z zachodu (w Polsce Paypal na razie nie jest bardzo popularny). A zatem jest nisza, więc postanowiłem sam zrobić taki plugin 🙂

Plugin nazywa się WP Dotpay Autokody SMS i znajdziecie go na tej podstronie mojego bloga. Na razie nie umie on wiele, ale jest to wersja 0.1 i dodam, że wersja działająca idealnie. Dzięki pluginowi możesz udostępnić swoje e-produkty za opłatą bezpośrednio ze swojego bloga.

Tak więc jeśli znasz się na czymś i właśnie napisałeś zarąbistego ebooka, nie musisz wydawać go przez Złote Myśli i dzielić się z nimi swoim zyskiem, a możesz wydać go bezpośrednio na swoim blogu. Bomba, nie? Kupujący przed pobraniem e-booka będzie musiał wysłać SMS Premium i wpisać otrzymany kod na stronie Twojego bloga. Koszt smsa ustalasz sam: od 1 do 25 złotych.

Coś czuję, że właśnie wprowadziłem polski światek WordPress w obszar polskiego Ecommerce, ale poczekamy zobaczymy. 😉 Plugin mam zamiar rozwijać i pewnie któregoś dnia na bazie jego będzie można na swojej WordPressowej zamieścić sklep z prawdziwego zdarzenia (jak np eshop, tyle, że nie jest on dostosowany do polskich warunków). Jeśli ktoś ma jakiś pomysł na kolejne funkcjonalności, zostawcie go w komentarzu pod pluginem.

P.S. Plugin jest dostępny po wysłaniu SMSa za 3 złote (jakże by mogło być inaczej? w końcu muszę Wam udowodnić, że działa 😉 ). Mam nadzieje, że kwota nie jest wygórowana: to przecież mniej niż piwo w barze 😉

0

Nie tylko narzekam na Ubuntu

Tak się Wam może wydawać, bo ostatnio tylko i wyłącznie piszę o tym jaki on jest wolny. To prawda, jest wolny (ostatni hit: po kliknięciu w Wyłącz komputer zaczyna się wyłączać dopiero po 15 sekundach lub wcale), ale ma kilka fajnych opcji.

Podoba mi się rozwiązanie zegarka w tym systemie. Kliknięcie w zegarek pokazuje kalendarz, mapkę świata i można sobie dodać więcej niż jedną lokalizację.

aplet zegarkaBardzo przydatne. Jak wspominałem dorabiam sobie grzebiąc ludziom w stronach (głównie w wordpressie) i z oczywistych względów unikam brania zleceń od Polaków (bo Polscy zleceniodawcy wykonania stron to zwykłe ciule szukające frajerów co za 500 złotych zrobią im sklep internetowy, wypozycjonowany na pierwszym miejscu i do tego we flashu). Gnome’owy aplecik z zegarkiem więc bardzo mi się przydaje. Na obrazku powyżej widzicie więc, że właśnie skończyłem rozmowę o zleceniu z Olgą, bo choć u mnie jest po południu to ona idzie już spać. Dalej pogadamy sobie jutro 🙂

* * *

Jak się domyślacie wróciłem z weekendu. Wyjazd niestety nie potoczył się tak jak wszyscy by chcieli (jak to powiedział Bruce Willis w Pulp Fiction: “jest daleko od ok”), ale teraz łatamy rany celnie zadane i czekamy kiedy znów ruszą dla nas dni. Ale zaczyna znów być w porzo.

* * *

Ale humor mam i tak bardzo dobry, bo przed chwilą dowiedziałem się, że w przyszłym tygodniu mam się stawić na podpisanie umowy o pracę 🙂

Chwilę potem zadzwoniła do mnie moja dziewczyna, że też właśnie dostała pracę, więc humor w ogóle mam wyrąbisty. Wygląda na to, że schodzimy z tarczy 🙂

0

WordPress SEO – Przewodnik

WordPress SEO – Definitive Guide To High Rankings For Your Blog.

Wrzucam na bloga, żeby mieć to jakoś zapamiętane i przeczytać kiedyś w przyszłości, bo – jako, że gdy mam zlecenie/pomysł na stronę pierwsze co się zastanawiam, to to, czy da się to zrobić w WordPresie – na pewno się przyda. Myślę, że także i Wam, więc zamiast w zakładkach, ląduje to tutaj. Dużo do czytania.

0

Proszę Państwa, oto łoś

wildpoland2

Jak już mam swojego bloga, na którym mogę pisać o wszystkim, to pozwolę sobie chwalić się tu stronami jakie wykonałem. Na razie stronę wykonałem jedną (przemilczam chwilowo strony, jakie robiłem lata temu i które już nie istnieją w sieci, a swego czasu bywały dość głośne), ale szykuje się już kolejna. No to zaczynamy.

Proszę Państwa – WildPoland – biebrza, białowieża wycieczki (a podlinkuję w ten sposób, to może uda się przepchnąć stronę też nieco w górę w Google). Stronę wykonałem już jakiś czas temu (na początku roku), ale chwalę się dopiero teraz.

Strona wykonana na zlecenie mojego kolegi i bardzo ściśle według jego wytycznych. Całe szczęście, że kolega Łukasz ma dobry gust i bardzo dobrą wizję strony, bo dzięki temu wytyczne nie sprawiają, że swojego dziełka musiałbym się wstydzić.

Łukasz zawodowo oprowadza turystów po atrakcjach przyrodniczych. Najczęściej można go spotkać nad Biebrzą z lornetką w ręku i tłumem nadzianych angielskich i niemieckich turystyów przy sobie. Strona miała na celu pomóc w rozwoju Łukasza biznesu i z tego co wiem już spełnia swoje zadanie.

Wild Poland to mini portal o zwiedzaniu przyrody w Polsce. Łukasz wrzuca tam swoje informacje na ten temat, bloguje na temat zmian w przyrodzie, a wszyscy czytelnicy mogą podzielić się swoimi spostrzeżeniami na zainstalowanym tam forum. Z uwagi na fakt, że całość jest celowana w zagranicznych turystów odwiedzających Polskę, na stronie obowiązuje język angielski.

Łukasz za stronę zapłacił (niestety nie tyle, ile bym chciał, no ale w końcu to kolega 😉 ) więc strona ma mu się zwrócić i z tego co wiem, powoli już się zwraca. Poza oczywistym znajdywaniem przez stronę kontaktu na linii Łukasz – turyści, na stronie zainstalowany jest plugin sklepowy, dzięki któremu Łukasz sprzedaje swój własnoręcznie napisany i opracowany przewodnik po Bagnach Biebrzańskich. Sprzedaż ruszyła całkiem niedawno, ale jak dzwoniłem do Łukasza przed wyjazdem do szpitala, powiedział mi, że już po kilku dniach było pięć pierwszych zamówień. Bomba.

A teraz technikalia, dla tych, którzy je lubią. Że strona napisana jest w HTML i CSS pisać nie muszę. O wiele ciekawszy jest fakt, że całość strony chodzi na skrypcie WordPress-a z zainstalowanymi licznymi pluginami (nawet wspomniany e-sklep i forum to wp-pluginy). Nie wszystko z marsza oczywiście działało tak jak powinno i w kodzie niektórych pluginów musiałem pogrzebać, a część funkcji napisać samemu, ale dzięki temu poznałem jak niesamowicie elastyczny i wygodny jest to skrypt! Od teraz mam zamiar wszystko najpierw próbować zrobić na wordpressowym silniku, a dopiero jak się okaże, że nie jest to możliwe, będę zastanawiał się nad innymi pomysłami.

No ichyba tyle o stronie. Zapraszam do obejrzenia, skorzystania, jeśli tematyka strony leży w Waszym kręgu zainteresowań. Napiszcie też mi w komentarzu tutaj co o wszystkim sądzicie.

* * *

Reklama 🙂

…a dla tych, których strona powaliła na kolana, mam dobrą informację: jestem na sprzedaż 😉 Jeśli właśnie masz zamiar ruszyć z jakimś internetowym biznesem (ale tak na poważnie, bo bardzo nie lubię rozmawiać o czyichś fantazjach), to zapraszam do kontaktu (kkarpieszuk małpa gmail.com). Wiesz już co potrafię (potrafię oczywiście więcej) i jeśli chcesz mnie zatrudnić / zlecić mi prace nad stroną – oczywiście, że się polecam 🙂

0

Wchodźcie, wchodźcie, siadajcie…

Kolejne wpisy już podaję. Dla każdego wystarczy.

Proszę się nie bać, każdemu starczy miejsca. Co prawda Google Analytics mówi, że byliście tu już 218 razy (całkiem nieźle jak na start bloga, na którym właściwie nie pojawił się jeszcze żaden konkretny wpis), ale spodziewam się milionów więcej gości. I tyle miejsc naszykowałem.

Nawiasem mówiąc oddźwiernego Google Analytics będę musiał zmienić na jakiś inny, bo mi się jego interfejs nie podoba. Chyba zainstaluje stary, sprawdzony stat24.pl.

Gdzie na środku stołu usłyszałem komentarz, chyba tig3ra czemu tu tak oklepanie zwyczajnie. Standardowy Kubric jako temat graficzny. Otóż to i tak ma na razie być 🙂 Z premedytacją nie zmieniam na razie na żaden inny, bo chcę sobie wybrać coś dobrego, ale i pasującego do charakteru bloga. A że jeszcze nie wiem jaki blog do końca charakter będzie miał, to i spokojnie czekam ze strojeniem jego.

Ale chyba faktycznie za kilka dni podmienie na coś innego, z zastrzeżeniem, że będzie to design nadal tymczasowy. Sam przecież ostatnimi dniami dorabiam sobie na upiększaniu i odpicowywaniu WordPressa innym ludziom (nieskromnie powiem, że z WordPressem umiem już zrobić prawie wszystko), więc wypada zrobić coś ponad przeciętną. A na razie niech szewc bez butów chodzi 🙂

OK, kończmy na razie z tymi przystawkami. Niedługo napiszę Wam coś ważnego, tylko, że jeszcze nie wiem jak to wyrazić 🙂

* * *

Wczorajszy program na NatGeo o Rwandzie przegapiłem 🙂 Ale pocieszam się, przecież widziałem to już przecież na własne oczy 🙂

0