WordPress: omiń 3 wpisy na stronie głównej

Na forum WordPressa mateoo88 zapytał(a):

Potrzebuję tak przerobić kod odpowiedzialny za wyświetlanie wpisów aby wyświetlały mi się one np od 4 (aby 4 wpis był wyświetlany jako pierwszy a 1,2 i 3 wpis był ignorowany).

I moja pierwsza myśl była następująca:

add_filter( 'posts_request', 'a' );
 
function a( $query )
{
    if ( is_home() ) {
        if ( preg_match( '/LIMIT (\d+), (\d+)/', $query, $matches ) ) {
            $offset = 3;
            $target = sprintf(
                'LIMIT %d, %d',
                $matches[1] + $offset,
                $matches[2] + $offset
            );
            $query = preg_replace( '/LIMIT \d+, \d+/', $target, $query );
        }
    }
    return $query;
}

Co oczywiście zadziała, ale nie jest to rozwiązanie eleganckie i pół dnia męczyło mnie, że powinno się to zrobić inaczej, jakoś tak bardziej „poprawnie”.

Po przejrzeniu w codex dostępnych filtrów, uznałem że dużo lepsze jest skorzystanie z filtra pre_get_posts, co dało efekt w postaci takiego kodu:

add_filter( 'pre_get_posts', 'iworks_skip_3_posts' );
 
function iworks_skip_3_posts( $query )
{
    if ( is_home() ) {
        $query->set( 'offset', 3 );
    }
    return $query;
}

Moim zdaniem, takie rozwiązanie jest zdecydowanie bardziej eleganckie.

Standardowo kod do pobrania:

[zip href='http://iworks.pl/wp-content/uploads/2012/10/iworks-skip-3-posts.php-.zip']iworks_skip_3_posts.php.zip[/zip]

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Poprzedni

Rezygnacja z Odnośników w WordPress 3.5

Następne

Promocja 3M

2 komentarze

  1. bastetmilo

    Kolejny raz kiedy Twój wpis ratuje mi dupsko.
    Offset – muszę zapamiętać raz na zawsze :D

Oparte na WordPress & Theme by Anders Norén