Tag: pre_get_posts

WordPress: posortuj wpisy wg. liczby komentarzy

tufutuf zapytał:

Czy jest / czy zna ktoś wtyczkę, która po wpisaniu komentarza pod konkretnym postem podbija go na samą górę w hierarchii postów. Chodzi o to aby tematy „aktywne” same się pozycjonowały na górze pierwszej strony z postami.

Odpowiedź na to pytanie jest dość prosta: wystarczy dla odpowiedniego zapytania zmienić sposób sortowanie.

Najlepiej wykorzystać do tego akcję

pre_get_posts

:

add_action( 'pre_get_posts', 'iworks_pre_get_posts' );
function iworks_pre_get_posts( $query )
{
    if ( $query->is_home() && $query->is_main_query() ) {
       $query->set( 'orderby', 'comment_count' );
    }
}
[zip href='http://iworks.pl/wp-content/uploads/2012/12/iworks-sort-post-by-comments.php-.zip']iworks_sort_post_by_comments.php[/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

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

Oparte na WordPress & Theme by Anders Norén