Custom Post Type and Taxonomy pagination 404 error

2019-03-05 06:39发布

问题:

Pagination is not working on taxonomy.php. Here is my code for register custom post type and taxonomy

add_action('init', 'ep_add_equipment');
function ep_add_equipment()
{
$labels = array(
'name' => _x('Equipments', 'post type general name', 'epanel'),
'singular_name' => _x('Equipments', 'post type singular name', 'epanel'),
'add_new' => _x('Add New Equipment', 'slide', 'epanel'),
'add_new_item' => __('Add New Equipment', 'epanel'),
'edit_item' => __('Edit Equipment', 'epanel'),
'new_item' => __('New Equipment', 'epanel'),
'view_item' => __('View Equipments', 'epanel'),
'search_items' => __('Search Equipments', 'epanel'),
'not_found' => __('No Equipments found', 'epanel'),
'not_found_in_trash' => __('No Equipments found in Trash', 'epanel'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => array('slug' => 'products'),
'capability_type' => 'post',
'exclude_from_search' => true,
'hierarchical' => true,
'menu_icon' => get_template_directory_uri() .'/images/equipment.png',
'menu_position' => 5,
'can_export' => true,
'supports' => array('title','editor','thumbnail', 'comments','page-attributes','excerpt'/*,'author','excerpt'*/),
);
register_post_type('equipment',$args);

register_taxonomy('equipments', 'equipment', array('hierarchical' => true, 'show_in_nav_menus' => true, 'show_ui' => true,
'query_var' => true, 'labels' => array('name' => __( 'Equipments Categories' ), 'singular_label' => __('Category'), 'add_new_item' => __( 'Add New Category' ), 'search_items' => __( 'Search Categories' )), 'rewrite' => array('slug' => 'equipments')));

}

function add_menu_admin_bar() {
global $wp_admin_bar;

if ( !is_super_admin() || !is_admin_bar_showing() )
exit;

// $wp_admin_bar->add_menu( array( 'id' => 'theme_options', 'title' =>__( 'E-Panel', 'epanel' ), 'href' => admin_url('admin.php')."?page=epanel_settings" ) );
$wp_admin_bar->add_menu( array( 'id' => 'equipment', 'title' =>__( 'Equipments', 'epanel' ), 'href' => admin_url('edit.php')."?post_type=equipment" ) );

$wp_admin_bar->add_menu( array( 'parent' => 'equipment', 'title' =>__( 'Add New Equipment', 'epanel' ), 'href' => admin_url('post-new.php')."?post_type=equipment" ) );
$wp_admin_bar->add_menu( array( 'parent' => 'equipment', 'title' =>__( 'Equipment Categories', 'epanel' ), 'href' => admin_url('edit-tags.php')."?taxonomy=equipment_categories&post_type=equipment" ) );

}
add_action( 'admin_bar_menu', 'add_menu_admin_bar' , 70);

Loop code for taxonomy.php

<?php
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'taxonomy' => $term->taxonomy,
'term' => $term->slug,
'post_type' => 'equipment',
'paged'=> $paged,
/*'posts_per_page' => 10,*/
'caller_get_posts'=> 1
);
?>
<?php query_posts( $args ); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

回答1:

May be you need to enable search to enable pagination

While declaring custom taxonomy you should disable search excluding.

exclude_from_search => false

This fixed my problem. I have very hard time to find this solution. Hope this helps everyone.

My code is:

register_post_type( 'lifestyle',
                array( 
                'label' => __('Lifestyle', 'tmi'), 
                'public' => true, 
                'show_ui' => true,
                'show_in_nav_menus' => true,
                'rewrite' => true,
                'hierarchical' => true,
                'menu_position' => 5,
                'exclude_from_search' =>false,
                'supports' => array(
                                     'title',
                                     'editor',
                                     'thumbnail',
                                     'excerpt',
                                     'revisions')
                    ) 
                );

    register_taxonomy('lifestylecat', __('lifestyle', 'tmi'),array('hierarchical' => true, 'label' =>  __('Categories', 'tmi'), 'singular_name' => __('Category', 'tmi'))
    );


回答2:

// get the global query object
global $wp_query;
// get the correct page var
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
// create the page argument
$args=  array('paged'=> $paged);
// merge the page argument array with the original query array
$args = array_merge( $wp_query->query, array( 'post_type' => 'equipment' ) );
// Re-run the query with the new arguments
query_posts( $args );