Przeniosłem na razie bloga (i w sumie nie tylko) z Dreamhosta, z którego radośnie rezygnuję, na home.pl. Przenosiny odbyły się z problemami, konkretnie dwoma:

  1. nie mogłem się zalogować do panelu administracyjnego WordPressa
  2. spi… się kodowanie

Problemy naprawione, a dla potomności:

Problem pierwszy: problem z zalogowaniem się. Problemu by nie było, gdybym zostawił dokładnie taki sam prefix tabel jaki był na dreamhoście. Niestety, wpadłem na pomysł zmiany prefiksu, i tu się wszystko rozjechało. Trzeba było poza aktualizacją pliku wp-config.php (która była oczywista) zaktualizować także zawartośc tabel PREFIX_options i PREFIX_users, zmieniając nazwom opcji prefiksy ze starego (u mnie np wp_opcja) na nowy (w moim przypadku byłoby to coś na kształt urzeniawp_opcja). Bez tego wyświetla się w kółko komunikat że nie mam uprawnień do zobaczenia żadnej strony w panelu…

Problem drugi: kodowanie. Nie udało mi się tutaj zrobić żadnej sztuczki, żadnego prostego zabiegu, nic. W końcu po prostu na dumpie z bazy danych wykonałem szereg operacji podstawiania ‘krzaczków’ na odpowiadające im litery. Zmienionego dumpa wrzuciłem z powrotem do bazy, do tego dodałem opcję (mój plik konfiguracyjny ma kilka lat) DB_CHARSET do pliku konfiguracyjnego, i zaczęło działać poprawnie. Porażka troszkę, ale cóż robić :(

Na tą chwilę wszystko powinno już działać OK, i to zdecydowanie szybciej – Dreamhost do demonów szybkości raczej nie należy ;) Liczę też że dużo bardziej niezawodnie ;)

Jeszcze tylko dopowiem, że przy całej walce z WordPressem na home, gdzie nie ma shella, wydatnie pomogła mi moja kolejna zabawka: wwwshell.php. Wbrew moim obawom, działa to całkiem nieźle, i gdyby nie brak historii i reakcji na enter po komendzie (tak, wiem, łatwo to naprawić zmieniając typ pola na <input type="text" />), to prawie nie byłoby różnicy ze zwykłym shellem ;)


Jakiś czas temu, gdy spam w akismecie przekroczył barierę krytyczną (na tą chwilę mam odfiltrowane poprzez Akismet ponad 30k sztuk spamu), zrobiłem sobie mały, prosty skrypt który odwiedza mi stronę w adminie WordPressa, zbiera odfiltrowane IP postów, i zapisuje mi je, odfiltrowując klasy adresowe z Polski. Skrypcik nazwałem asipht. Dzięki niemu mam mniej więcej podgląd na to, z jakiego IP najczęściej spam dostaję, i najbardziej wybitne persony dodaję bezwarunkowo do .htaccess, w którym mam też kilka klas adresowych zerżniętych chamsko od Mikołaja :)

Skrypt nie jest doskonały, powiedziałbym wręcz że dużo mu brakuje, ale nie chce mi się dodawać więcej funkcjonalności, starcza mi to co jest. Najbardziej przydałaby się opcja porządnego logowania do serwisu, ale w zamian tego podałem mu cookiesy uwierzytelniające z WP :)

Jak ja tego używam: raz dziennie sprawdzam sobie w akismet czy coś się nie zaplątało, jeśli nie to odpalam asipht, a następnie usuwam wszystkie spamowe komentarze (circa 200 dziennie, choć zdarzało się i 1.5k). Za pomoca drugiego skryptu, asiphtstats, podglądam jakie adresy IP “wygrywają” w konkurencji najwięcej spamu z jednego adresu IP, a później ręcznie dodaję sobie zwycięzców do .htaccess, zapewniając sobie tym święty spokój od tego pismaka :)

Gdyby ktoś był zainteresowany takim skrypcikiem, to używane przeze mnie pliki można sobie pobrać z adresu urzenia.net/wp-content/asipht/.

Acha, odnośnie konfiguracji (znajdującej się pod koniec pliku asipht):

c_user_n
nazwa cookie z nazwą użytkownika (coś w stylu: wordpressuser_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
c_user_v
zawartość tegoż cookie
c_pass_n
nazwa cookie z hasłem (np. ‘wordpresspass_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’)
c_pass_v
zawartość tegoż cookie
c_domain
nazwa domeny dla jakiej przeznaczone jest cookie
c_path
ścieżka dla cookie
url
pełen URL do strony z Akismet w naszym WP
savepath
określa ścieżkę zapisu pliku z zebranymi spamerskimi IP
whitelist
ścieżka do pliku z zakresami IP które nie będą dodawane do bazy, np: 217.119.64.0 217.119.79.255
pages
boolean, określa czy nasz Akismet stronicuje wyniki zebranego spamu (tak jak w nowej wersji), czy też nie (jak w starszej, lub zmodyfikowanej mojej :) )

Uznałem za potrzebne usunięcie niektórych stron z listingu w sidebarze. Jako, że jestem leniwy, to nie chciało mi się poszukać, czy ktoś już nie zrobił plugina do tego… wymagałoby to myślenia, a dziś wybitnie nie mam do tego głowy ;) Więc jako że PHP w którym jest napisane WP, które znam dosć dobrze, i zazwyczaj nie muszę zbyt dużo przy nim myśleć (odnośnie takich drobiazgów), to sobie poprawiłem WordPressa ;)

Włączanie i wyłączanie tego fiuczera jest dość proste – zmiana wywołania funkcji wp_list_pages(). Jej argumentem jest string w formacie takim jak URLe (a=1&b=2&c=3) więc teraz wywołanie wp_list_pages() wygląda tak:

wp_list_pages('hidden=0')

(no, ciut inaczej w moim wypadku, ale to nie ma znaczenia…).

Zmodyfikowałem zatem funkcję get_pages() (pośrednio wywoływaną przez wp_list_pages()), a diff tej zmiany wygląda tak:

--- template-functions-post.php.org     2005-12-06 19:32:17.837970264 +0100
+++ template-functions-post.php 2005-12-06 19:32:53.698518632 +0100
@@ -277,6 +277,7 @@
        if (!isset($r['child_of'])) $r['child_of'] = 0;
        if (!isset($r['sort_column'])) $r['sort_column'] = 'post_title';
        if (!isset($r['sort_order'])) $r['sort_order'] = 'ASC';
+       if (!isset($r['hidden'])) $r['hidden'] = 1;

        $exclusions = '';
        if (!empty($r['exclude'])) {
@@ -297,6 +298,19 @@
        if ( empty($pages) )
                return array();

+       if (!$r['hidden'])
+       {
+         while (list($key,$val)=each($pages))
+         {
+           $id = $val->ID;
+           $hide = get_post_meta($id, 'hide', true);
+           if ('' != $hide)
+           {
+             unset($pages[$key]);
+           }
+         }
+       }
+
        // Update cache.
        update_page_cache($pages);

Teraz wystarczy jako Custom Field wstawić pole hide o wartości 1 (czy jakiejkolwiek innej), żeby dana strona nie była listowana w sidebarze ;)

Teoretycznie dobrze by było to zrobic jako plugin WP, ale już wspominałem, że nie chce mi się dziś myśleć. Poza tym łatwo to wyłączyć. I mam w planach rezygnację z WP ;) I jeszcze trochę wymówek bym znalazł jak by trzeba było ;)


Jednak mi się dziś chciało. Zrobiłem skrypta do konwersji całości WordPressa z ISO-8859-2 na UTF-8. Oczywiście może też posłużyc do konwersji całkiem innych kodowań, wystarczy zmienić argumenty w wywołaniu funkcji iconv(). Skrypt znajduje się pod adresem: urzenia.net/wp-content/iso2utf/. Można go dowolnie zmieniać i wykorzystywać do własnych potrzeb, zgodnie z zasadami GPLv2.

Skrypt zmienia tylko zawartość bazy, te tabele i pola które uznałem że trzeba zmienić, reszta (przynajmniej w wersji WP 1.5.1.2 nie musi być konwertowana.

Skrypt nie zmienia za to collation w wersjach MySQL wyższych niż 4.0, więc do tego potrzeba ręcznie pogrzebać w bazie danych. Mi zajęło to jakieś 30 minut, ale nie chciałem tego robić automatem. Poza tym wszystko działa :)

Po zakończeniu działania skryptu, w katalogu w którym on się znajduje będzie utworzony plik converted.sql, który trzeba ręcznie wrzucić do bazy – również tego nie chciałem żeby robić automatem – nigdy nie miałem do nich zaufania ;)

Oczywiście nie biorę odpowiedzialności za złe działanie skryptu (za dobre zresztą też nie), etc etc. Używasz go na własną odpowiedzialność :)

Jeśli gdzieś ktoś dojrzy na diary jakieś problemy z pl-znaczkami, to proszę o info.


dorzucilem wczesniej tez plugina do wp, o nazwie countdown (lub dates to remember) link. pozwala na wstawienie w spechjalnym formacie listy dat, i wydarzen jakie sie wtedy pojawia. dzieki temu po prawej mam od kiedy jestem bezrobotny, czy kiedy konczy mi sie sad. taki gadzet.

plugin ma fajne mozliwosci – mozna nawet ustawic, ze jakies wydarzenie jest w ostatnia srode miesiaca czy rozne takie – czyli nice. brakowalo mi tylko jednej rzeczy. jako, ze plugin ma cos a’la tagi, jak np %nocountdown%, wykorzystalem to i dodalem tag %sticky%. normalnie, sa pokazywane wszystkie daty, lub okreslona ilosc najswiezszych (inne wariacje sa wymienione w dokumentacji). dodanie gdzies w opisie wydarzenia mojego tagu powoduje, ze dana data jest wyswietlana _zawsze_, niezaleznie od tego, czy dane wydarzenie bedzie nedlugo czy tez za 10 lat. wszystkie daty z tagiem %sticky% beda zawsze na gorze wszystkich dat. etc. jesli ktos chce przetetsowac, to moja wersja znajduje sie pod adresem: urzenia.net/wp-content/countdown.tar.bz2


Już od jakiegoś czasu pracowalem nad wlasnym blogiem/websitem/whatever. jak to zwykle bywa, szewc bez butow chodzi ;) pomimo ze zaczelem pisac wlasny engine, i ze nawet sporo juz mialem, zdecydowalem sie uzyc czegos gotowego – a wordpress calkiem mi sie spodobal. troche czasu zabralo mi dostosowanie go do siebie, czesciowe spolszczenie etc, ale wbrew pozorom to calkiem mila zabawa ;) na pewno jeszcze sporo musze znalezc/poprawic/sprawdzic etc, no ale to samo zycie. w koncu nie ja pisalem ten system, wiec nie znam go do konca ;)

jakby nie bylo, wordpress dziala. http://urzenia.net tez. wiec bede mial gdzie wylewac swoje zale ;) czy to sie komus podoba czy nie.

jak bede mial chwile wiecej wolnego czasu, wtedy troche posiedze nad designem – na razie przerobilem tylko standardowy schemat jaki dostarcza ze soba wordpress. pracy mam az nadto zeby sie tym bardziej zajmowac…