我有一个名为“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; ?> > <?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/
为什么会发生这种情况?
由于
斯科特
答案 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
)
);
?>