web-dev-qa-db-ja.com

ページごとに同じ投稿を表示

だから私はカテゴリでそれから都市でフィルタリングするこのブログがあります。ろ過を作成している間にどこかで私は早くうまく動作しているように思われたページネーションを壊しました。私のホームページではすべての投稿が表示され、アーカイブの404に移動するはずです。私は/%category%/%postname%/のカスタムリンク構造を使用しており、私のインデックスページには次のものがあります。

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

私のアーカイブページでも同じです。私はすべてをフィルタする関数を作成しました。これがページングが発生するはずの場所です。

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>

上記の関数は、フィルタリングする必要がある都市/カテゴリを渡してから、両方が設定されているのか、どちらか一方だけがフィルタリングされてページングされるのかによって異なります。それ以外のページはありません...これが何であるかについての何か提案は?また、私のインデックスファイルにはループがなく、query_posts()とを使用して$paged = get_query_var('paged') ? get_query_var('paged') : 3;内の数字を1以外のものに変更すると、すべてのページが404になります。それから、すべての投稿とページのインデックスが正常に表示されます。これがなぜなのか、またこれを防ぐために何ができますか?

1
Howdy_McGee

posts_per_pageは1ページあたりの投稿数を表します。表示しているページではありません。そのためには、paged引数を設定します。 WP_Query およびこの Scribuによる記事 を参照してください。

paged引数を設定すると、ページ番号に応じて適切な投稿を返します(1ページ目の最初のx投稿、2ページ目の次のx投稿など)。そうでなければ、あなたは常に最初のx投稿を照会しています - したがって各ページで同じです。

例えば、

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

つかいます

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

そしての代わりに

query_posts('posts_per_page='.$paged);

つかいます

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

('posts_per_page='.$paged)('paged='.$paged)に置き換えます

2
Kyle