by karlosky | Sty 28, 2015 | Obrazy
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 | SEO
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 | Szablony
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 | Pluginy, Własne typy wpisów
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 | Własne typy wpisów
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');...