Wordpress自定义分类法分页,找不到404

时间:2011-01-27 14:44:35

标签: php wordpress templates taxonomy custom-post-type

我有一个名为“dcategory”的自定义分类法,因此我创建了一个名为“taxonomy-dcategory.php”的模板文件,以确定其显示方式。以下是此模板的代码:

<?php
global $paged, $wp_query;
get_header();
?>
<div id="leftcontent">
<?php if(is_user_logged_in()) : ?>
    <?php
    $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
    if($term->parent == 0) : ?>
      <h1>Specialist Directory</h1>
      <h2><?php echo $term->name; ?></h2>
      <ul>
        <?php
        $subtermcats = get_terms('dcategory', 'hide_empty=0&parent='.$term->term_id.'&orderby=name');
        foreach($subtermcats as $key => $data) {
            $termlink = get_term_link($data, 'dcategory');
            echo "<li><a href=\"".$termlink."\">".$data->name."</a></li>";
        }
        ?>
      </ul>
    <?php else: ?>
        <h1>Specialist Directory</h1>
        <?php
        $topterm = get_term_by( 'id', $term->parent, get_query_var( 'taxonomy' ) );
        ?>
        <h2><?php echo $topterm->name; ?> &gt; <?php echo $term->name; ?></h2>
        <?php
            // Include Search - Search results returned in $_SESSION['lpoc_search_data'];
            include("functions/directorysearch.php");
            if(count($_SESSION['lpoc_search_data']) > 0) {
                $temp = $wp_query;
                $wp_query = null;
                $args = array(
                   'post_type' => 'listings',
                   'post__in' => $_SESSION['lpoc_search_data'],
                   'showposts' => 10,
                   'paged' => $paged,
                   'orderby' => 'post__in'
                );
                $wp_query = new WP_Query($args);
            } else {
                query_posts("cat=9999999"); // Make a fake query that will be empty to flush out the content from the page we are on
            }
        ?>
        <?php if (have_posts()) : ?>
            <div class="pageination clearfix">
              <div class="smallleftcontent">
                <select name="sortby" class="dropdownreplace">
                  <option value="date-desc">Order by latest added</option>
                  <option value="date-asc">Order by oldest added</option>
                  <option value="price-asc">Order by price ascending</option>
                  <option value="price-desc">Order by price descending</option>
                </select>
              </div>
              <div class="smallrightcontent">
              <?php wp_pagenavi(); ?>
              </div>
            </div>
            <?php while (have_posts()) : the_post(); ?>
            <h2><?php the_title(); ?></h2>
            <?php endwhile; ?>
            <div class="pageination clearfix">
              <div class="smallleftcontent">
                <select name="sortby" class="dropdownreplace">
                  <option value="date-desc">Order by latest added</option>
                  <option value="date-asc">Order by oldest added</option>
                  <option value="price-asc">Order by price ascending</option>
                  <option value="price-desc">Order by price descending</option>
                </select>
              </div>
              <div class="smallrightcontent">
              <?php wp_pagenavi(); ?>
              </div>
            </div>
        <?php else: ?>
        <?php endif; ?>
    <?php endif; ?>
<?php else: // USER NOT LOGGED IN ?>
    <?php include("functions/pleaseregister.php"); ?>
<?php endif; ?>
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

以下是发生的事情:

检查用户是否已登录。如果没有显示注册信息。 如果用户位于父dcategory上,则会显示所选的dcategory子项。 如果用户在子dcategory上,则运行我自己的自定义brewed数据库查询,该查询根据用户到帖子的距离获取订单中的帖子ID。 结果在会话数组中返回,并作为自定义查询传递给$ wp_query。 查询有效,页面显示前十个帖子以及wp_pagenavi生成的分页(全部正确)。

但是当导航到第2页时,我返回了一个找不到的页面:

http://www.example.com/dcategory/antiques/http://www.example.com/dcategory/antiques/page/2/

为什么会发生这种情况?

由于

斯科特

2 个答案:

答案 0 :(得分:1)

重新启用固定链接设置...

答案 1 :(得分:1)

我自己解决了这个问题。

我的自定义查询返回的结果比wordpress为所选类别返回的结果多。因此,当我在第二页上进行时,没有足够的结果,因此找不到页面。

因此,我没有创建新的查询,而是使用它来过滤现有结果:

<?php
        // Include Search - Search results returned in $_SESSION['lpoc_search_data'];
        include("functions/directorysearch.php");
        query_posts(
            array_merge(
                array( 'post__in' => $_SESSION['lpoc_search_data'], 'orderby' => 'post__in' ),
                $wp_query->query
            )
        );
    ?>