WP自定义帖子类型分页/ 404错误

时间:2012-02-02 22:53:50

标签: wordpress mod-rewrite

我在WordPress中使用自定义帖子类型(称为“魔术字段”生成的“ns_news_article”)已注册并正常工作。这将重写URL以在域后添加“类别/新闻”(所以:www.mydomain.com/category/news/custom-post-1)。我必须在那里有“假目录”。

我在functions.php中有这个:

add_rewrite_rule("[ns_news_article]" . '$', "index.php?pagename=[ns_news_article]", "top");
add_rewrite_rule("[ns_news_article]" . '/page/([0-9])*/?', "index.php?pagename=[ns_news_article]" . '&paged=$matches[1]', "top"); 
global $wp_rewrite;
$wp_rewrite->flush_rules();

第二行在查看多个列表页面时会处理分页404问题,但在尝试查看单个帖子时会出现404错误。如果我摆脱这个,你可以查看帖子,但分页不起作用。

我可以解决这个问题,还是应该采取其他方式?

1 个答案:

答案 0 :(得分:0)

我最近做了自定义帖子类型分页,所以这就是我做的。假设您的自定义帖子类型称为“customp”。

  1. 在主题中创建一个名为page-customp.php的文件。然后发布一个带有“Customp”标题的空白页面。现在,当您访问www.yourdomain.com/customp时,您将看到一个使用page-customp.php作为模板的页面。现在我们将使用此页面显示自定义帖子和分页。

  2. 将此代码放在your page-customp.php文件中:

    $paged = 1;
    
    $postsPerPage = 5;
    
     if ( get_query_var('paged') ) $paged = get_query_var('paged');
    
     if ( get_query_var('page') )  $paged = get_query_var('page');
    
     query_posts( '&post_type=customp&paged=' . $paged . '&posts_per_page='.$postsPerPage );
    
    while ( have_posts() ) : the_post();
    
      the_title();
      echo get_the_excerpt();
    
    endwhile;
    
    customp_paginate();
    
  3. functions.php文件中输入:

    function customp_paginate() {
    
      global $wp_query, $wp_rewrite;
    
      $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
    
      $pagination = array(
        'base' => @add_query_arg('page', '%#%'),
        'format' => '',
        'total' => $wp_query->max_num_pages,
        'current' => $current,
        'show_all' => true,
        'type' => 'list',
        'prev_text' => '«',
        'next_text' => '»',
      );
    
      if ($wp_rewrite->using_permalinks())
        $pagination['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s', get_pagenum_link(1))) . 'page/%#%/', 'paged');
    
      if (!empty($wp_query) && $pagination['total'] != 1) {
        $pagination['add_args'] = array('s' => get_query_var('s'));
    
        echo "<div class='paginate'><strong>Pages:</strong>" . paginate_links($pagination) . "</div>";
      }
    
    }
    
  4. 我希望它有所帮助:)