IT-Swarm.Net

query_posts a stránkování, stále uvízl po mnoha výzkumech

Potřebuji vytvořit pár vlastních příspěvků ... Nevím proč, ale dostávám 404, když jdu na další stránku. Zde je můj kód:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts( array( 'post_type' => 's_stories', 'posts_per_page' => 4 , 'paged'=>$paged) );

if (have_posts()){ 

while (have_posts()) { the_post(); ?>


<div class="post">
<h2 class="title"><a href="<?php echo get_permalink($post->ID); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>

</div> <!-- end post -->

<div class="clear"></div>

<?php } }  ?>

<div class="paging">


    <div style="float:left; font-weight:bold"><?php next_posts_link('&laquo; Previous Story') ?></div>
    <div style="float:right; font-weight:bold"><?php previous_posts_link('Next Story &raquo;') ?></div>

</div>

Mám „stránkovanou“ hodnotu a post navigaci, jakýkoliv nápad, co se děje ...?

Dík :)

1
Dan

Nepoužívejte query_posts . Toto je klasický příklad toho, co se stane, když děláte :)

V zásadě, když WordPress přijme url, interpretuje to jako dotaz - pak dotazuje databázi, aby našla výsledky (pokud nějaké existují) a poslouží vhodnou šablonu (např. 404.php v případě žádných výsledků).

Pokud se stane, že se dostanete na stránku šablony - je pak řečeno, aby se tento dotaz zlikvidoval a začal nový (což je plýtvání) a přeruší stránkování.

V podstatě stránkování přidává proměnnou paged dotazu do aktuální adresy URL - tato nová adresa URL (která by vás měla přivést na stránku 2, řekněme) - tvoří základ dotazu, na který se zobrazí stránka 2 - adresa URL v adresním řádku však není obsahem jste po (protože jste to zahodili a spustili jste nový dotaz pomocí query_posts. Výsledkem je, že dotaz, který opravdu nechcete, je proveden a nevyvolává žádné výsledky, takže šablona 404 je doručena a šablona s vaše query_posts není nikdy dosaženo.

Podívejte se na výše uvedený odkaz pro alternativy k query_post, ale protože se jedná o hlavní dotaz (dotaz založený na přijaté adrese URL), který chcete používat pre_get_posts .

2
Stephen Harris

Zkuste to...

<?php
  global $paged; global $wp_query;
  $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query();
  $wp_query->query('showposts=XX&post_type=POST_TYPE_NAME'.'&paged='.$paged);
  while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

    // do your content output here...

<?php endwhile; ?>

   // do pagination here...

<?php $wp_query = null; $wp_query = $temp;?>
2
userabuser

query_posts() by neměly být používány obecně a zvláště pokud se snažíte s stránkováním zablokovat.

Obě stránkování a 404 logika se děje před tím, než se soubor šablony (a query_posts() v něm) začne načítat.

Chcete-li Tweak hlavní dotaz na stránku, jedna z nejlepších možností je použít pre_get_posts hák.

1
Rarst