Wyobraźmy sobie, że tworzymy nieco bardziej rozbudowany serwis, w którym użytkownicy mogą się rejestrować. Niekoniecznie jednak chcemy, aby byli oni świadomi, że serwis bazuje na WordPressie, albo chcemy wzbogacić i uprzyjemnić ich doświadczenie i stworzyć specjalny panel administracyjny. Tak czy inaczej nie chcemy, aby „szwędali” się nam po panelu administracyjnym WordPressa.

Żeby nie rozmieniać się na drobne, załóżmy, że zalogowanych użytkowników, którzy mają określoną rolę (w naszym przypadku subscriber, chcemy przekierowywać na określoną stronę (naszserwis.pl/uzytkownik/). I taką właśnie funkcjonalność realizuje poniższy kod:

function prefiks_restrict_wpadmin_access() {
    if ( ! defined('DOING_AJAX') || ! DOING_AJAX ) {
        $user = wp_get_current_user();

        if ( in_array('subscriber', $user->roles) ) {
            wp_redirect( site_url( '/uzytkownik/' ) );  // <- dostosuj swoich potrzeb
            die;
        }
    }
}
add_action( 'admin_init', 'prefiks_restrict_wpadmin_access' );

(więcej…)

Gdy korzystamy z parametru s WP_Query, WordPress wyszuka wpisów, które zawierają podane słowa w tytule lub treści. Zdarza się jednak, że chcemy wyszukiwać jedynie po tytule (bo jest to w danej chwili bardziej intuicyjne – np. jeśli tworzymy pole z automatycznym podpowiadaniem tytułu wpisu).

Poniższy kod pozwoli nam osiągnąć właśnie taki efekt.

function prefiks_search_by_title_only( $search, $query ) {
    global $wpdb;

    if ( empty( $search ) ) {
        return $search;
    }
    $q = $wp_query->query_vars;
    $n = ! empty( $q['exact'] ) ? '' : '%';

    $search = $searchand = '';

    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }

    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() ) {
            $search .= " AND ($wpdb->posts.post_password = '') ";
        }
    }
    return $search;
}
add_filter( 'posts_search', 'prefiks_search_by_title_only' );

(więcej…)

Czy zdarzyło Ci się kiedyś, że na stronie z rozbudowanym drzewem kategorii, chciałeś ukryć wpisy z podkategorii w widoku archiwum danej kategorii? Z pytaniem tym spotykam się dość często, więc może warto pokazać, jak należy się za to zabrać.

Poniżej znajdziesz kod, który realizuje dokładnie takie zadanie:

function prefiks_exclude_subcategory_from_category_archive( $query ) {
    if ( !is_admin() && $query->is_main_query() && is_category() ) {
        $category_not_in = $query->get( 'category__not_in', array() );

        if ( $query->get('cat', false) ) {
            $query->set('tax_query', array( array(
                'taxonomy' => 'category',
                'operator' => 'IN',
                'terms' => $query->get('cat'),
                'include_children' => false,
            ) ));
        }
    }
}
add_filter( 'pre_get_posts', 'prefiks_exclude_subcategory_from_category_archive' );

(więcej…)

Na pewno spotkałeś się ze stronami lub motywami, które wyświetlając listę wpisów, używają dla nich różnego wyglądu. Na przykład pierwsze dwa artykuły wyświetlane są jako duże zdjęcie i tytuł, dwa następne jako tytuł, małe zdjęcie i zajawka, a pozostałe – jako same tytuły. Poniżej przykład takiego bloku listy artykułów z portalu gazeta.pl.

Przykład rozbitej pętli artykułów z serwisu gazeta.pl

Taki układ artykułów stosowany jest dość często i niestety równie często implementowany jest w nieprawidłowy/niewydajny sposób, co prowadzi do wielu zbędnych zapytań do bazy danych i spowolnienia działania strony. A jak zrobić to poprawnie i przy użyciu tylko jednej pętli?

(więcej…)

Do płacenia za domeny pewnie każdy już przywykł tak samo, jak do corocznych faktur za hosting. Jestem wręcz pewien, że z bardzo dużym prawdopodobieństwem, domenę kupiłeś właśnie od swojej firmy hostingowej i nawet nie sprawdzałeś oferty konkurencji.

A szkoda, bo z mojego doświadczenia wynika, że znakomita większość osób za domenę przepłaca i to bardzo słono…

Czy jednak oszczędność na domenie nie będzie wiązała się z jakimiś przykrymi skutkami? Wiemy przecież, że często nadmierne oszczędności źle się kończą. Podejrzewam, że mało kto będzie dziś próbował nadmiernie oszczędzać na hostingu…

I tu mam dobrą wiadomość. Pomijając bardzo skrajne przypadki, dostawcy domen sprzedają nam dokładnie tę samą usługę o dokładnie tej samej jakości i dokładnie tych samych dodatkach.

Skąd więc tak duże różnice w cenie? Wynikają one głównie z rabatów, które dany dostawca posiada przy rejestracji domen oraz od jego marży.

Warto zatem zapoznać się z poniższym zestawieniem cen rejestracji i odnowienia domen.

(więcej…)

Na forum i grupach WP często pojawia się pytanie o to, jak sprawić, aby wpisy z wybranej kategorii nie pojawiały się na stronie głównej. Jak to zrobić poprawnie? Wbrew pozorom nie jest to wcale takie trudne – realizuje to poniższy fragment kodu:

function prefiks_exclude_category_from_homepage( $query ) {
    if ( !is_admin() && $query->is_main_query() && is_home() ) {
        $category_not_in = $query->get( 'category__not_in', array() );

        if ( is_scalar($category_not_in) ) {
            $category_not_in = array( $category_not_in );
        } elseif ( !is_array($category_not_in) ) {
            $category_not_in = array();
        }

        $category_not_in[] = 3;  // <- zmień 3 na ID kategorii, którą chcesz ukryć

        $query->set( 'category__not_in', $category_not_in );
    }
}
add_filter( 'pre_get_posts', 'prefiks_exclude_category_from_homepage' );

(więcej…)