Znalazłem ten problem na pomocy Wordpress i temat niestety jest teraz zamknięty. Mam ten sam problem ... (czytaj poniżej)
Stworzyliśmy witrynę, na której członkowie mogą polecać takie rzeczy, jak ulubione książki, filmy, piosenki itp. W tym celu wykorzystam stronę Filmy jako przykład.
Strona „Filmy” jest ostatecznie niestandardowym szablonem strony, który prosi wordpress, aby wyświetlał losową listę WSZYSTKICH postów, które otrzymały kategorię „filmy” (kategoria 31). Wyświetla tytuł tych filmów w losowej kolejności, korzystając z poniższego kodu.
<?php
$rand = new WP_Query("cat=31&showposts=-1&orderby=rand");
while($rand->have_posts()) : $rand->the_post();
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
Problem w tym, że lista jest dość długa i chciałbym podzielić ją na dwie lub więcej stron po około 10 filmów. Aby to osiągnąć, wykorzystałem poniższy kod.
<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("cat=31&orderby=rand&showposts=10&paged=$page");
while ( have_posts() ) : the_post()
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
Ale jest problem, ponieważ chociaż dzieli dane na strony po 10 postów (paginuje), nie zawiera nowego zestawu 10 postów na stronie 2 i tak dalej. Innymi słowy, ponieważ wyświetla listę rzeczy w losowej kolejności, po prostu wychodzi i otrzymuje kolejne 10 losowych postów (lub w tym przypadku tytuły filmowe). W rezultacie mamy kilka powtarzających się postów z tytułami filmów zamiast nowego zestawu 10 losowych tytułów filmów na stronie 2 itp.
Moje pytanie brzmi - co mogę dodać do tego kodu, aby Wordpress „zapamiętał”, które losowe 10 postów zawierał na stronie 1, a następnie poprosił o nowy zestaw 10 postów do umieszczenia na stronach 2, 3 itd. Do wszystkie posty są wyświetlane. Chciałbym, aby było tylko jedno wystąpienie posta na stronę, gdy jest losowo sortowane w zestawach po 10.
źródło
Od ostatnich wersji WordPressa możesz teraz dodać ziarno do wartości
orderby
parametruWP_Query
:$seed
jest liczbą losową. Powinieneś zapisać go jako zmienną sesji PHP. Nie zapomnij włączyć sesji PHP w WordPress, dzwoniącsession_start()
do Ciebiefunctions.php
:Dzięki tej składni nie musisz używać
posts_orderby
filtra. Co więcej, nie musisz się upewnić, że filtr jest stosowany tylko do docelowego WP_Query.Aby uzyskać więcej informacji, przeczytaj ten bilet na WordPress Core.
źródło