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…)