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:
- wrzuć załączony plik do folderu
wp-content/plugins
, a potem włącz wtyczkę - wrzuć załączony plik do folderu
wp-content/mu-plugins
- dołącz kod do pliku
functions.php
aktualnie używanego motywu
bastetmilo
Kolejny raz kiedy Twój wpis ratuje mi dupsko.
Offset – muszę zapamiętać raz na zawsze :D
Marcin Pietrzak
Proszę bardzo :D