by karlosky | Sty 28, 2015
Na jednej ze stron zechciałem wyświetlać ostatnie wpisy z bloga. Jako najprostszy sposób pobierania danych wybrałem oczywiście kanał RSS, który WordPress ma w standardzie. W standardzie nie posiada jednak miniatur wpisów, które w moim przypadku były niezbędne. Jak rozwiązać ten problem? Przeszukując bazę pluginów do WordPressa znalazłem wiele gotowych rozwiązań, które rozbudowują treść i strukturę kanału RSS. Pozwalają także dodawać miniatury, jednak nie w takiej formie, w jakiej bym chciał. Najczęściej są to rozwiązania przyklejające obrazek jako znacznik <img> do treści posta lub też dodające gotowe tagi xml, np: <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://adresbloga.pl/wp-content/uploads/2015/01/adresminiatury.jpg" width="150" height="150"/> Ja tymczasem potrzebowałem czystego adresu URL obrazka, zamkniętego np. w znaczniku <image></image>. W tym celu napisałem prostą funkcję: function rss_get_image(){ global $post; if (function_exists ('has_post_thumbnail') && has_post_thumbnail($post->ID)) { $image_id = get_post_thumbnail_id( $post->ID ); $image_url = wp_get_attachment_url($image_id); } return ($image_url); } Niestety sama funkcja nie wystarczy, bo trzeba ją jeszcze wprowadzić do kanału RSS. Choć staram się nigdy nie edytować plików WordPressa, to w tym przypadku uznałem, że nie mam wyjścia. Musiałem umieścić funkcję w pliku /wp-includes/feed-rss2.php. Wewnątrz znacznika <item></item> umieściłem swój upragniony obrazek: <image><?php echo rss_get_image(); ?></image> W ten sposób mamy sam URL obrazka w jednym tagu...
by karlosky | Sty 5, 2015
Z różnych powodów możemy preferować różną wersję adresu URL witryny. Musimy jednak zdecydować się na jedną z nich i konsekwentnie stosować jeden adresy, gdyż dla wyszukiwarek internetowych adresy z „www” i bez „www” to dwie zupełnie różne strony. Pozostawiając witrynę dostępną pod dwoma adresami przyczyniamy się do powstawania tzw. „duplicate content”, czyli kopii treści. Ta sama zawartość widoczna jest wówczas pod adresami: domena.pl www.domena.pl Tak skopiowana treść dostępna podróżnymi adresami może działać niekorzystnie na postrzeganie witryny przez algorytmy wyszukiwarek (np. Google). W związku z tym warto sprawdzić pod jakimi adresami dostępna jest witryna, a w razie problemów ustawić przekierowania 301 zgodnie z odpowiednim przykładem. W tym celu należy edytować plik .htaccess, który w wersji podstawowej WordPressa wygląda następująco: # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress Odpowiednia edycja pliku pozwoli przekierować nie tylko stronę główną, ale także wszystkie podstrony na ich prawidłowe odpowiedniki. Przekierowanie „z www” na „bez www” Aby wykonać przekierowanie z adresu www.domena.pl na domena.pl, w pliku muszą się znaleźć następujące deklaracje: RewriteEngine On RewriteCond %{HTTP_HOST} ^www.domena.pl RewriteRule (.*) http://domena.pl/$1 [R=301,L] Przekierowanie „bez www” na „z www” Aby wykonać przekierowanie z adresu domena.pl na www.domena.pl, w pliku muszą się znaleźć następujące deklaracje: RewriteEngine On RewriteCond %{HTTP_HOST} ^domena.pl RewriteRule (.*) http://www.domena.pl/$1...
by karlosky | Lis 26, 2014
Warto było nieco zaczekać z zakupem szablonów do WordPressa, aby skorzystać ze specjalnych promocji przygotowanych z okazji amerykańskiego Black Friday oraz Cyber Monday 2014. Już 28 listopada i 1 grudnia czeka na nas szereg niesamowitych ofert. 1. 68 szablonów 40% taniej – cssigniter.com Serwis cssigniter.com przygotował ofertę dostępu do wszystkich szablonów w cenie 40% niższej dla dowolnego pakietu. Aby skorzystać z oferty wystarczy podczas składania zamówienia wpisać kod promocyjny: BLACKFRIDAY. Sprawdź ofertę 2. 18 szablonów 50% taniej – frogsthemes.com Serwis frogsthemes.com także oferuje rabat na dostęp do wszystkich szablonów. W tym przypadku jest to aż 50% za wpisanie kodu promocyjnego: blackfri2014. Sprawdź ofertę 3. 50%rabatu na każdy szablon – themeshift.com Kupując każdy pojedynczy szablon w serwisie themeshift.com możemy liczyć na 50% rabatu. Wystarczy, że skorzystamy z kodu rabatowego: TS-BF-2014. Sprawdź ofertę 4. 26 szablonów i 45 pluginów 50% taniej – wpeka.com Serwis wpeka.com oferuje ponad 70 swoich produktów aż 50% taniej. Wśród nich jest 26 szablonów typu premium do WordPressa oraz 45 dodatkowych wtyczek. Kod promocyjny to: WPEKABF14. Sprawdź ofertę 5. 28 szablonów, każdy 30% taniej – cyberchimps.com W serwisie cyberchimps.com możemy wybierać spośród 28 szablonów. Każdy z nich możemy mieć 30% taniej korzystając z kodu promocyjnego: internet. Sprawdź ofertę Lista ofert będzie na bieżąco aktualizowana, dlatego jeśli znacie inne ciekawe promocje, proszę o informację w...
by karlosky | Lis 24, 2014
Plugin Contact Form 7 to bardzo popularna wtyczka formularza kontaktowego. Posiada bardzo duże możliwości konfiguracji, przez co jest bardzo użyteczna i uniwersalna. Niestety, w standardzie nie posiada niektórych funkcji, które wydają się obowiązkowe dla tego typu modułów, np. zapisywanie wiadomości przesyłanych przez formularz. Moją propozycją sposobu zapisu wiadomości przesyłanych przez formularz wiadomości jest utworzenie nowego typu wpisów (custom post type) oraz zapisywanie każdej wiadomości jako nowy wpis. W tym celu musimy utworzyć nowy typ wpisu, np. „request”. add_action('init', 'register_request_post_type'); function register_request_post_type() { register_post_type( 'request', array( 'label' => 'Requests', 'description' => 'Our Requests', 'public' => false, 'show_ui' => true, 'show_in_menu' => true, 'capability_type' => 'post', 'map_meta_cap' => true, 'hierarchical' => false, 'rewrite' => array('slug' => 'request', 'with_front' => false), 'query_var' => true, 'supports' => array('title', 'editor'), 'labels' => array ( 'name' => 'Requests', 'singular_name' => 'Request', 'menu_name' => 'Requests', 'add_new' => 'Add new request', 'add_new_item' => 'Add new request', 'edit' => 'View message', 'edit_item' => 'View message', 'new_item' => 'New request', 'search_items' => 'Search request', 'not_found' => 'Not found', 'not_found_in_trash' => 'Not found in trash' ) ) ); } Kolejnym krokiem jest utworzenie funkcji zapisującej dane z formularza jako wpis utworzonego wcześniej typu. Funkcja ta musi być podpięta do funkcji wysyłania formularza wtyczki Contact Form 7. add_action( 'wpcf7_mail_sent', 'save_request' ); function save_request( $cf7 ){ $submission = WPCF7_Submission::get_instance(); if ( $submission ) { $posted_data = $submission->get_posted_data(); } $content = ' From: '.$posted_data['name'].' ('.$posted_data['email'].') Message Body: '.$posted_data['message']; $new_request = array( 'post_type' => 'request', 'post_title' => $posted_data['name'] . ' ('.$posted_data['email'].')', 'post_content' => $content, 'post_status' => 'private', 'post_author' => 1 ); wp_insert_post( $new_request ); } Tak utworzona funkcja zapisuje każdą wiadomość wysyłaną formularzem. Wiadomości te widoczne są...
by karlosky | Lis 24, 2014
WordPress daje bardzo fajne narzędzie pozwalające na szybkie i sprawne tworzenie panelu zarządzania szablonem po stronie admina z możliwością wyboru istniejących stron w formularzach. Jeżeli potrzebna jest możliwość wyboru istniejącej strony w formularzu, możemy skorzystać z funkcji wp_dropdown_page(). Aby wyświetlić taką listę w formularz wystarczy następująca forma: <?php $args = array( 'depth' => 0, 'child_of' => 0, 'selected' => 0, 'echo' => 1, 'name' => 'page_id', 'id' => null, // string 'show_option_none' => null, // string 'show_option_no_change' => null, // string 'option_none_value' => null, // string ); wp_dropdown_pages( $args ); ?> Najważniejsze argumenty funkcji mają następujące znaczenie: child_of – określa rodzica dla listowanych stron, selected – wybrana opcja dla rozwijanej listy, echo – wyświetlanie lista (w przeciwnym razie można ją zapisać do zmiennej), name – nazwa zmiennej / pola formularza. Dla standardowych stron utworzonych na WordPressie jest to doskonałe rozwiązanie. Problem pojawia się jednak wówczas, gdy chcemy wyświetlić listę wyboru wpisów własnego typu, czyli custom_post_type. Aby stworzyć sobie wygodne rozwiązanie tego problemu, można skorzystać z poniższej funkcji: <?php function custom_post_select($select_id, $post_type, $selected = 0) { $post_type_object = get_post_type_object($post_type); $label = $post_type_object->label; $posts = get_posts(array('post_type'=> $post_type, 'post_status'=> 'publish', 'suppress_filters' => false, 'posts_per_page'=>-1)); echo '<select name="'. $select_id .'" id="'.$select_id.'">'; echo '<option value = "" >'.$label.' </option>'; foreach ($posts as $post) { echo '<option value="', $post->ID, '"', $selected == $post->ID ? ' selected="selected"' : '', '>', $post->post_title, '</option>'; } echo '</select>'; } ?> Dzięki temu, jeżeli tylko chcemy umieścić w formularzu rozwijaną listę wyboru własnego typu wpisów (custom post type), wystarczy wywołać funkcję na przykład: <?php custom_post_select('product_id','product');...
by karlosky | Lis 23, 2014
Opisywałem ostatnio sposób zmiany rozmiarów zdjęć uploadowanych do biblioteki multimediów WordPressa. Tak wprowadzone zmiany niestety nie poprawiają rozmiaru zdjęć dodanych wcześniej. Podobny problem występuje także podczas zmiany szablonu WP, gdy nowy szablon korzysta z innych rozmiarów miniatur, niż poprzedni. Aby uzyskać oczekiwany efekt i prawidłowe rozmiary zdjęć, możemy oczywiście załadować zdjęcia do WordPressa ponownie. Przy większej ilości zdjęć jest to jednak dosyć uciążliwe. Na szczęście baza pluginów do WordPressa posiada rozwiązanie tego problemu – plugin Regenerate Thumbnails. Po zainstalowaniu wtyczki wystarczy przejść od biblioteki multimediów (zakładka „Media”), zaznaczyć wybrane zdjęcia (lub wszystkie) oraz z menu masowych działań wybrać „Regenerate Thumbnails” i kliknąć „Zastosuj”. W zależności od ilości wgranych zdjęć proces ten może potrwać kilka minut. Wszystko przebiega jednak stosunkowo szybko i sprawnie, więc zdecydowanie warto skorzystać z takiego rozwiązania, zamiast ładować pliki...
by karlosky | Lis 19, 2014
Według mojej opinii qTranslate jest, a raczej był najlepszym pluginem językowym dla WordPressa. „Był” ponieważ niestety nie jest już rozwijany. Pomimo tego, zarówno ja, jak i wiele innych osób, wciąż korzystam z tego wynalazku. Brak aktualizacji pluginów powoduje wiele problemów podczas aktualizacji samego WordPressa. Niektóre z tych bugów całkowicie dyskwalifikują wtyczkę, inne zaś są bardzo proste w usunięciu. Jednym z tych łatwiejszych do rozwiązania problemów jest niedziałający edytor wizualny w nowszych wersjach WordPressa (chyba od wersji 3.8). Edytując post otrzymujemy komunikat o treści: The qTranslate Editor has disabled itself because it hasn’t been tested with your WordPress version yet. This is done to prevent WordPress from malfunctioning. You can reenable it by clicking here (may cause data loss! Use at own risk!). To remove this message permanently, please update qTranslate to the corresponding version. Ten komunikat i wyłączenie wizualnego edytora treści wynika z niezgodności wersji zainstalowanego WordPressa oraz zdefiniowanej wersji obsługiwanej przez plugin qTranslate. Aby usunąć ten komunikat i włączyć edytor, musimy więc przekonać plugin, że wersje się zgadzają 🙂 Otwieramy i edytujemy plik wtyczki: wp-content/plugins/qtranslate/qtranslate_wphacks.php Wyszukujemy w nim warunek (linia 61): if($GLOBALS['wp_version'] != QT_SUPPORTED_WP_VERSION) { Stałą QT_SUPPORTED_WP_VERSION możemy zastąpić liczbą odpowiadającą używanej wersji WordPressa. Możemy też na przykład wstawić zmienną globalną 🙂 if($GLOBALS['wp_version'] != $GLOBALS['wp_version']) { W ten sposób obsługiwana wersja zawsze będzie się zgadzać 🙂 Możemy też usunąć cały warunek i wstawić po prostu „0”, aby alert nigdy się nie...
by karlosky | Lis 16, 2014
WordPress daje nam kilka standardowych rozmiarów uploadowanych grafik. Za każdym razem, gdy korzystamy z biblioteki multimediów dodając pliki graficzne, WordPress tworzy automatycznie kilka różnych kopii: Miniatura (Thumbnail) Średni rozmiar (Medium) Duży rozmiar (Large) Pełny rozmiar (Full) Każdą grafikę możemy swobodnie wykorzystywać zgodnie z dostępnymi rozmiarami. Tworząc lub edytując własny szablon WordPressa możemy swobodnie dodawać własne rozmiary obrazków, które zostaną automatycznie zapisane na serwerze podczas ich wysyłanie do biblioteki multimediów. Aby dodać własny rozmiar obrazków w WordPressie możemy skorzystać z funkcji add_image_size. Funkcję tą możemy wykorzystać w pliku functions.php modyfikowanego szablonu, dodając kod według schematu: add_image_size( $name, $width, $height, $crop ); Funkcja ta może przyjmować 4 parametry: $name – nazwa nowego rozmiaru, którą możemy później wykorzystywać w szablonie $width – szerokość obrazka $height – wysokość obrazka $crop – parametr opcjonalny, określa typ „cropowania”, czyli sposobu określania rozmiaru i proporcji obrazka...