我有一个自定义的帖子类型,叫做rock
使用名为genero
. taxonomy-genero-curiosity.php
mypage/摇滚乐/好奇/
单击后续分页页面链接时(例如,[2]、[3]、[next])
mypage/摇滚乐/好奇心/第页/第2页
把我带到404页。
<?php
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
//for a given post type, return all
$args = array(
\'tax_query\' => array(
array(
\'taxonomy\' => \'genero\',
\'field\' => \'slug\',
\'terms\' => \'curiosity\'
)
),
\'post_type\'=>\'\', //add your post type name
\'posts_per_page\' => 1,
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
wp_reset_query(); // Restore global post data stomped by the_post().
?>
<?php wp_pagenavi( array( \'query\' => $my_query ) ); ?>
<?php wp_reset_postdata(); ?>
我怎样才能解决这个问题?我做错了什么?
EDIT
下面是我如何注册我的帖子类型
function my_custom_post_product() {
$labels = array(
\'name\' => _x( \'Rock\', \'post type general name\' ),
\'singular_name\' => _x( \'Rock\', \'post type singular name\' ),
\'add_new\' => _x( \'Add New\', \'entry in rock\' ),
\'add_new_item\' => __( \'Add New entry in rock\' ),
\'edit_item\' => __( \'Modificar entry in rock\' ),
\'new_item\' => __( \'New entry in rock\' ),
\'all_items\' => __( \'all entry in rock\' ),
\'view_item\' => __( \'see entry in rock\' ),
\'search_items\' => __( \'search entry in rock\' ),
\'not_found\' => __( \'Nothing entry in rock\' ),
\'not_found_in_trash\' => __( \'Nothing entry in rock on thrash\' ),
\'parent_item_colon\' => \'\',
\'menu_icon\' => get_bloginfo(\'template_directory\'). \'/images/my_menu_icon.png\',
\'menu_name\' => \'Rock\'
);
$args = array(
\'labels\' => $labels,
\'description\' => \'Introduzca un nueva entrada en rock\',
\'public\' => true,
\'menu_position\' => 5,
\'supports\' => array( \'title\', \'editor\', \'thumbnail\', \'excerpt\', \'comments\' ),
\'has_archive\' => true,
\'hierarchical\' => true,
\'rewrite\' => array(\'slug\' => \'Rock/%genero%\', \'with_front\' => false),
\'query_var\' => true,
//\'rewrite\' => true,
//\'publicly_queryable\' => false,
);
register_post_type( \'Rock\', $args );
}
add_action( \'init\', \'my_custom_post_product\' );
这是我现在的循环。我仍然得到这个代码的404错误
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<header>
<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<p><time datetime="<?php echo get_the_date(); ?>"><?php echo get_the_date(); ?></time>. <?php if ( comments_open() ) : ?><a class="comment" href="<?php the_permalink(); ?>#comments"><?php comments_number(\'0 Comments\', \'1 Comment\', \'% Comments\'); ?></a><?php endif; ?></p>
</header>
<?php endwhile; else: ?>
<p><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>
<?php endif; ?>
<nav class="paging">
<?php if(function_exists(\'wp_pagenavi\')) : wp_pagenavi(); else : ?>
<div class="prev"><?php next_posts_link(\'« Previous Posts\') ?></div>
<div class="next"><?php previous_posts_link(\'Next Posts »\') ?></div>
<?php endif; ?>
</nav>
EDIT 2
我已经将camelcase“Rock”更改为“Rock”,并且可以工作,但只有在“管理”>“设置”>“阅读”中更改配置,并将post设置为显示为5,就像每页的post\\u数(在循环中),但如果我需要在其他页上显示较少的post\\u,例如post\\u per\\u page=3(例如,[2],[next]),则会出现404错误页。
如果其他页面需要,是否有办法自定义数字?
<?php $posts=query_posts($query_string . \'&orderby=asc&posts_per_page=5\'); if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?$content = get_the_excerpt();
echo substr($content, 0, 200);
global $post;
$text = $post->post_excerpt;?>
<?php endwhile; else: ?>
<p><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>
<?php endif; ?>
最合适的回答,由SO网友:Pieter Goosen 整理而成
您的问题肯定是您的自定义查询。您的自定义查询有一两个问题,我现在不处理。你应该努力完成this page (WP_Query
) 如何正确构造自定义查询
您真正的问题是,您必须问自己,定制查询是否必要?直截了当的答案应该是可靠的NO. 应始终避免使用自定义查询,而应使用主页上的主查询和任何类型的存档页。主查询非常特定于所请求的特定页面,这是自定义查询无法复制的。
虽然这些自定义查询可以工作,但当您尝试分页时,真正的问题就会出现,正如您现在所经历的那样。
带有默认循环以显示任何模板的主查询结果的基本布局应如下所示
if( have_posts() ) {
while( have_posts() ) {
the_post();
// CALL YOUR TEMPLATE TAGS
}
}
The
if
条件并不总是必要的,就像单打一样。php模板和归档模板。正如你所见,
NO 自定义查询。
您需要对主查询进行的任何更改(需要运行自定义查询的页面模板除外)都可以通过pre_get_posts
这是更改模板上查询内容的正确方法。有关上述内容的更多信息,请查看this post
因此,您的解决方案是,删除自定义查询的所有部分,并将其替换为我上面给出的默认循环,只需添加循环对象和HTML标记,然后就可以正常分页
EDIT
从粘贴的代码来看,您的查询现在看起来很好。应该是这样的。
这一切的根本原因是你的帖子类型,Rock
. 不能在自定义帖子类型名称中使用camelcase(这适用于自定义分类法和函数名称)。您应该考虑将自定义帖子类型重命名为rock
.
请记住,刷新并重新刷新永久链接,以确保在更新自定义帖子类型代码后所做的更改生效
EDIT 2
你要么没有阅读链接的帖子,要么只是走了一条自杀的捷径
query_posts
. 请重新阅读此答案中的链接帖子。你应该
NEVER 曾经利用过
query_posts
.
Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。
删除此行
$posts=query_posts($query_string . \'&orderby=asc&posts_per_page=5\');
这句话是你页面上邪恶的根源
您可以使用更改每页的分页pre_get_posts
这是正确的做法。如果您需要更改curiosity
“术语”页面中,可以将以下内容添加到函数中。php(注意:这需要php 5.3+)
add_action( \'pre_get_posts\', function ($q ) {
if( !is_admin() && $q->is_main_query() && $q->is_tax( \'genero\', \'curiosity\' ) ) {
$q->set( \'posts_per_page\', 3 );
$q->set( \'order\', \'ASC\' );
}
)};
EDIT 3
对于PHP 5.3之前的版本,上述功能无法使用,因为匿名函数仅在PHP 5.3中引入。对于这些版本,请尝试以下操作
add_action( \'pre_get_posts\', \'wpse170243_custom_ppp\' );
function wpse170243_custom_ppp($q ) {
if( !is_admin() && $q->is_main_query() && $q->is_tax( \'genero\', \'curiosity\' ) ) {
$q->set( \'posts_per_page\', 3 );
$q->set( \'order\', \'ASC\' );
}
}
SO网友:Amit Mishra
尝试以下操作:
将此custom\\u pagination()函数添加到函数中。php文件
function custom_pagination($numpages = \'\', $pagerange = \'\', $paged=\'\') {
if (empty($pagerange)) {
$pagerange = 2;
}
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == \'\') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* We construct the pagination arguments to enter into our paginate_links
* function.
*/
$pagination_args = array(
\'base\' => get_pagenum_link(1) . \'%_%\',
\'total\' => $numpages,
\'current\' => $paged,
\'show_all\' => False,
\'end_size\' => 1,
\'mid_size\' => $pagerange,
\'prev_next\' => False,
\'prev_text\' => __(\'«\' , \'swift\'),
\'next_text\' => __(\'»\' , \'swift\'),
\'type\' => \'array\',
\'add_args\' => false,
\'add_fragment\' => \'\'
);
$paginate_links = paginate_links($pagination_args);
echo \'<div class="Pagination-Num"><ul>\';
foreach ( $paginate_links as $paginate_link ) {
echo "<li> $paginate_link </li>";
}
echo \'</ul></div>\';
}
并对Post循环文件调用custom\\u pagination()
<?php
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
//for a given post type, return all
$args = array(
\'tax_query\' => array(
array(
\'taxonomy\' => \'genero\',
\'field\' => \'slug\',
\'terms\' => \'curiosity\'
)
),
\'post_type\'=>\'\', //add your post type name
\'posts_per_page\' => 1,
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
if (function_exists(custom_pagination)) {
custom_pagination($my_query->max_num_pages,"",$paged);
}
}
wp_reset_query(); // Restore global post data stomped by the_post().
?>
<?php wp_reset_postdata(); ?>
我想它会很好用的