WordPress: losowa kolejność postów

WordPress: losowa kolejność postów

Jak losowo wyświetlać posty? Nic prostszego, wystarczy jedna linijka kodu (tu rozbite, żeby dobrze się wyświetlało:

add_filter(
    'posts_orderby',
    create_function( '$a', 'return "rand()";' )
);

Jak wykorzystać ten kod?

Należy go wstawić w function.php uzywanego motywu, oczywiście nie w takiej formie, bo nie wyświetlimi pojedynczego wpisu nawet, bo będzie losowy, ale z odpowiednimi warunkami.

Przykład losujący tylko na stronie kategorii:

add_filter( 'posts_orderby', 'iworks_random_order' );
function iworks_random_order( $order ) {
    if ( is_category() ) {
        return "rand()";
    }
    return $order;
}
,

24 odpowiedzi na “WordPress: losowa kolejność postów”

  1. A jak to wygląda w przypadku paginacji?
    Bo wydaje mi się, że przy przechodzeniu na kolejną stronę walidacji podaje kolejne, wylosowane posty, bez zawężania wyników o wyświetlone już wpisy.
    Ale nie jestem w 100% pewien, bo moje testy trwały ułamek sekundy ;)

  2. Po krótkich testach już się upewniłem, że jest tak, jak przed chwilą napisałem.
    Ktoś ma jakiś pomysł na uwzględnienie tego?

  3. A po co filtry do tego. Przecież to jest zaimplementowane w argumentach funkcji get_posts().
    Wystarczy dodać do tej funkcji argument:

    'orderby’ => 'rand’

    Nie trzeba się bawić w warunki, globalne filtry. Włączamy losowanie tam gdzie potrzebujemy.

  4. @Michał: prawie masz rację. Prawie, ponieważ funkcji get_posts używa się poza the loop. Przeciętny motyw nigdy nie używa tej funkcji, raczej używa „while ( have_posts() )”, do którego nie wepniesz się z „orderby”.

  5. @Marcinie oczywiście, że masz rację. Ale ..

    to samo 'orderby’=>’rand’ jest dostępne ogólnie w WP_Query co powoduje, że można go użyć praktycznie wszędzie gdzie występuje zapytanie do bazy danych o posty w tym query_posts() czy wspomniane get_posts itd.

    Musisz pamiętać, że globalne dodanie proponowanego przez Ciebie filtru wszędzie w całym temacie będzie powodowało wyświetlanie losowych postów (niezależnie od paginacji jak zauważył @Sebastian). Trzeba stosować różne warunki aby to ujarzmić. Zastosowanie tego prostego kodu w typowym temacie zasadniczo rozłoży funkcjonalność tematu na łopatki.

    Więc nadal łatwiej dodać 2 linijki kodu z funkcją

    global $wp_query;
    $args = array_merge( $wp_query->query, array( 'orderby’ => 'rand’ ) );
    query_posts( $args );

    przed konkretną pętlą, czy wykorzystać ten argument gdzieś w temacie z funkcją get_posts.

  6. @Michał: to co podałem we wpisie, to przepis JAK zrobić losowanie, a nie GDZIE je stosować.

    Uzupełniłem wpis o przykład losowania w kategorii.

  7. Witam, a jak zrobić by wyszukiwarka wyświetlała po jednym ale losowym wpisie oczywiście pasującym do wyrażenia wyszukiwania?

  8. Hmm, dzięki za szybką odpowiedź. Jednak to co mi napisałeś za dużo mi nie mówi, a zależy mi bardzo na tym zagadnieniu.
    Czyli wyszukiwanie ma odbywać się normalnie a wyniki wyszukiwania trzeba ustawić aby losowo się wyświetlały pojedynczo tak?
    Moja znajomość obsługi PHP jest na bardzo niskim poziomie, byłbym bardzo wdzięczny za bardziej szczegółową odpowiedź

  9. @Mateusz: jeżeli Twój motyw ma plik search.php, to w nim wyświetlanie realizowane jest za pomocą „while( have_posts() )” i w środku tej pętli trzeba wyświetlić „losowy” post, a reszty po prostu nie wyświetlać.

  10. Nie wiem czy dobrze to zrobiłem ale chyba działa. Zaraz sprawdzę na innych rekordach.
    Dodałem: przed:
    Może tak być?

  11. Coś mi kodu nie dodało.
    Dodałem : przed:

    Może tak być czy nie bardzo?

  12. witam, swietnie wszystko działa. uzyłem kodu mam jednak jeden problem. Kod ten sprawił że wpisy które są wpisami opisującymi domy noclegowe są wyświetlane losowo. Jak wymusic żeby wordpress kategorię z nr 15 (aktualnosci) pokazywał według daty od najnowszych do najstarszych? wie ktos i podpowie jak przeedytować kod? :)

  13. działa idealnie :) dziękuję bardzo za podpowiedz i gratuluję wiedzy :)

  14. Dodatnie filtra to fajna sprawa.

    A gdyby tak do tego było możliwe sortowanie wpisów (na stronie blogu dla niezalogowanego użytkownika) według daty, alfabetycznie itp – podobnie jak na allegro – możemy sortować sobie według kończących się, najdroższych, najtańszych itd.

    Ktoś z Was może spotkał taki plugin?

  15. Witam,
    także chciałbym by na moim blogu losowo pojawiały się posty, ale nie wiem gdzie i jak coś dodać. Przeczytałem wszystkie podpowiedzi i nie wiem jak się za to zabrać. Czy może mam zbyt ubogą wersję bloga? Proszę o pomoc za którą z góry dzięki!

  16. @Romuald: nie za bardzo rozumiem „ubogość”. Pamiętaj jedno, większość opisywanych przeze mnie rzeczy jest możliwa tylko w przypadku własnego hostingu. Jeżeli kupujesz u kogoś usługę w modelu utrzymaniowym, to (zazwyczaj) nie da się ich zastosować.

    Opisz coś więcej, albo napisz mi maila.

Jeżeli chcesz skomentować, napisz mail na adres marcin w domenie strony na której jesteś. Dodam twoj komentarz.