web-dev-qa-db-fra.com

Poster une pagination affichant les mêmes messages chaque page

J'ai donc ce blog qui filtre par catégorie, puis par ville. Quelque part en créant la filtration, j'ai cassé la pagination qui semblait bien fonctionner auparavant. Cela ne fonctionne pas sur ma page d'accueil où il devrait afficher tous les messages et passe à 404 dans mes archives. J'utilise une structure de lien personnalisée de /%category%/%postname%/ et dans ma page d'index, j'ai:

<p align="center" id="space">
<?php posts_nav_link(' - ',__('&#171; Newer Posts','ml'),__('Older Posts &#187;','ml')) ?>
</p>

C'est la même chose sur ma page d'archives. J'ai créé une fonction pour tout filtrer et c'est ici que la pagination devrait avoir lieu:

From.phphttp://Pastebin.com/d9jikfPq

    $testParent = $wp_query->get_queried_object();

function cust_query($city, $cat)// Filter and page everything by city/cat
{
    $setCity = false;
    $setCat = false;

    $paged = get_query_var('paged') ? get_query_var('paged') : 3;               // Seperates Posts into Pages
    $citySlug = get_category_by_slug($city);                                    // Used to get City && Category CatID
    $categorySlug = get_category_by_slug($cat);                                 // ^^^

    if(isset($cat) && $cat != null)                                             // Check if $cat is set
    {
        $category = $categorySlug->cat_ID;                                      // Setting Category CatID
        $setCat = true;
    }
    if(isset($city) && $city != null)                                           // Check if $city is set
    {
        $city = $citySlug->cat_ID;                                              // Setting City CatID   
        $setCity = true;
    }

    if($setCity && $setCat && !$testParent->parent)                             // If both cat and city are set filter by both
    {
        /* 
           http://wordpress.stackexchange.com/questions/40815/custom-queries-child-categories-not-showing-up
           For more information.
        */
        if(!$testParent->parent)
        {
            $args = array(
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'category',
                        'field'    => 'id',
                        'terms'    => $city,
                    ),
                    array(
                        'taxonomy' => 'category', 
                        'field'    => 'id',
                        'terms'    => $category,
                    )
                )
            );
            $args = array_merge( $args, array( 'paged' => $paged ) );
            return query_posts($args);                                          // Return Query
        }
        return query_posts(array(category__and => array($category, $city), 'paged' => $paged)); // Return Query
    }
    if($setCity)                                                                // Filter by City Only
        return query_posts('cat='.$city.'&paged='.$paged);                      // Return Query
    else if($setCat)                                                            // Filter by Category Only
        return query_posts('cat='.$category.'&paged='.$paged);                  // Return Query
    else                                                                        
        return query_posts('paged='.$paged);                                    // Return all posts
}

Header.phphttp://Pastebin.com/vzm08E40

<?php require_once('from.php'); ?>
<?php
    $path = $_SERVER['REQUEST_URI'];                        // Get URL and Set it to $path
    $dir = explode(DIRECTORY_SEPARATOR, $path);             // Seperate URL by Directory '/'

    if(isset($_SESSION['city']))                            // City Reset, Remove if statement if you don't want to reset it.               
        unset($_SESSION['city']);                           // add && is_home() to reset on banner click. Useful

    if($dir[4] == 'city')
        $_SESSION['city'] = $dir[5];                        // If sub-Directory is City, get Final Directory as City
    else
        $_SESSION['cat'] = end($dir);                       // Get Category

    $navCity = catName($_SESSION['city']);                  // Get formatted City Name for Navigation
    $navSlug = get_category_by_slug($_SESSION['city']);     // Get Category by Slug
    $cityNavID = $navSlug->cat_ID;                          // Get Category ID by Category
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    <title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>
    <link rel="profile" href="http://gmpg.org/xfn/11" />
    <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
    <link rel="stylesheet" type="text/css" media="print" href="<?php bloginfo( 'stylesheet_directory' ); ?>/print.css" />
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> <?php _e('RSS Feed','ml');?>" href="<?php bloginfo('rss2_url'); ?>" />
    <?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
    <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
    <?php wp_head(); ?>
</head>
<body id="section-index"  <?php body_class(); ?>>
<div id="container">
<?php 
    //echo $_SESSION['cat'] . " " . $_SESSION['city'];
?>
<div id="header">
<a href="<?php bloginfo('siteurl');?>" title="<?php bloginfo('name');?>">
    <img src="<?php echo get_template_directory_uri() . "/img/logo.jpg" ?>" title="" alt="" />
</a>
</div><!-- end id:header -->
    <!-- This Appears Above The Sidebar-->
    <div id="headerSocial">
        <a href="AboutUs.php"> About Us</a> |
        <a href="contact_us.php">Contact Us</a> |
        <a href="member.php">Get Listed</a><br>
        <!-- AddThis Button BEGIN -->
        <div class="addthis_toolbox addthis_default_style ">
            <a class="addthis_button_preferred_1"></a>
            <a class="addthis_button_preferred_2"></a>
            <a class="addthis_button_preferred_3"></a>
            <a class="addthis_button_preferred_4"></a>
            <a class="addthis_button_compact"></a>
            <font color="004682"> &nbsp; Share This!</font>
        </div>
        <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4e5515692839a404">
        </script><!-- AddThis Button END -->
    </div>
    <!-- End Header Social -->
<div id="navContainer">
    <div id="nav">
        <ul>
            <li id="cityItem">
                Filter By: <a href="<?php get_category_link($cityNavID); ?>"><?php isset($_SESSION['city']) ? print($navCity) : print("Home") ?></a>
                <ul id="cityChildren">
                    <?php if(isset($_SESSION['city'])) : ?>
                        <li class="cat-item">
                            <?php $cat = get_category_by_slug($_SESSION['cat']); ?>
                            <a href="<?php echo esc_url(get_category_link($cat->cat_ID)) ?>" title="">All</a>
                        </li>
                    <?php endif ?>
                    <?php wp_list_categories('orderby=id&child_of=1&title_li='); ?>
                </ul>
            </li>
            <?php wp_list_categories("orderby=slug&exclude=1&hide_empty=0&title_li="); ?>
        </ul>
    </div>
    <?php if(!is_single()) : ?>
        <div id="crumbs">
            <?php include('breadcrumbs.php'); ?>
        </div>
    <?php endif; ?>
</div>

La fonction ci-dessus est transmise ville/catégorie à filtrer, puis selon que les deux sont définis ou qu'un seul filtre et page. Sauf que ça ne fait pas page ... Des suggestions sur ce que cela pourrait être? Je tiens également à souligner que mon fichier d'index n'a pas de boucle. Il utilise seulement query_posts () et, le nombre dans $paged = get_query_var('paged') ? get_query_var('paged') : 3; étant remplacé par 1, le nombre de pages est 404 si toutes les pages sont affichées. tous les articles et toutes les pages indexent bien ...Pourquoi s'agit-il et que puis-je faire pour empêcher cela?

1
Howdy_McGee

Le posts_per_page fait référence au nombre de publications par page et non à la page que vous consultez. Pour cela, vous voulez définir l’argument paged. Voir le Codex sur WP_Query et ce article de Scribu .

Avec l'argument paged, les articles appropriés seront renvoyés en fonction du numéro de page (les x premiers articles de la page 1, les x suivants de la page 2, etc.). Sinon, vous interrogez toujours les x premiers messages, donc les mêmes pour chaque page.

Par exemple, au lieu de

query_posts($args, 'posts_per_page='.$paged);

utilisation

$args = array_merge( $args, array( 'paged' => $paged ) );
query_posts($args);

et au lieu de

query_posts('posts_per_page='.$paged);

utilisation

query_posts('paged='.$paged);
7
Stephen Harris

Remplacez le ('posts_per_page='.$paged) par ('paged='.$paged)

2
Kyle