我在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错误。如果我摆脱这个,你可以查看帖子,但分页不起作用。
我可以解决这个问题,还是应该采取其他方式?
答案 0 :(得分:0)
我最近做了自定义帖子类型分页,所以这就是我做的。假设您的自定义帖子类型称为“customp”。
在主题中创建一个名为page-customp.php
的文件。然后发布一个带有“Customp”标题的空白页面。现在,当您访问www.yourdomain.com/customp时,您将看到一个使用page-customp.php
作为模板的页面。现在我们将使用此页面显示自定义帖子和分页。
将此代码放在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();
在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>";
}
}
我希望它有所帮助:)