在单页WordPress中分页自定义帖子类型

时间:2015-11-25 20:08:25

标签: php wordpress pagination wordpress-plugin

我有两个 自定义帖子类型

  • School
  • teacher

并使用 发布2帖子 插件进行连接。因此,当我显示学校单页school-single.php,时,它会向我显示学校信息和在这所学校工作的教师名单。一切都很好。 对我来说,我想通过分页显示教师名单,这不起作用。

注册自定义帖子类型

function school() {

    $labels = array(
        'name'                  => _x( 'schools', 'Post Type General Name', 'text_domain' ),
        'singular_name'         => _x( 'school', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'             => __( 'school', 'text_domain' ),
        'name_admin_bar'        => __( 'school', 'text_domain' ),
        'parent_item_colon'     => __( 'Parent Item:', 'text_domain' ),
        'all_items'             => __( 'All Items', 'text_domain' ),
        'add_new_item'          => __( 'Add New Item', 'text_domain' ),
        'add_new'               => __( 'Add New', 'text_domain' ),
        'new_item'              => __( 'New Item', 'text_domain' ),
        'edit_item'             => __( 'Edit Item', 'text_domain' ),
        'update_item'           => __( 'Update Item', 'text_domain' ),
        'view_item'             => __( 'View Item', 'text_domain' ),
        'search_items'          => __( 'Search Item', 'text_domain' ),
        'not_found'             => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'    => __( 'Not found in Trash', 'text_domain' ),
        'items_list'            => __( 'Items list', 'text_domain' ),
        'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
        'filter_items_list'     => __( 'Filter items list', 'text_domain' ),
    );
    $args = array(
        'label'                 => __( 'school', 'text_domain' ),
        'description'           => __( 'school Description', 'text_domain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', ),
        'taxonomies'            => array( 'category', 'post_tag' ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => true,        
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'capability_type'       => 'page',
    );
    register_post_type( 'school', $args );

}
add_action( 'init', 'school', 0 );

分页代码:wp_bs_pagination

<?php
/**
 * WordPress Bootstrap Pagination
 */

add_action( 'wp_loaded', 'the_pagination' );


// Bootstrap pagination function

function the_pagination($pages = '', $range = 1) {  

    $showitems = ($range * 2) + 1;  

    global $paged;

    if(empty($paged)) $paged = 1;

    if($pages == '') {

         global $wp_query; 

         $pages = $wp_query->max_num_pages;

         if(!$pages) {
            $pages = 1;
         }

    }   

    if(1 != $pages) {

        echo '<div class="text-center">'; 
        echo '<nav><ul class="pagination"><li class="disabled hidden-xs"><span><span aria-hidden="true">Page '.$paged.' of '.$pages.'</span></span></li>';

        if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link(1)."' aria-label='First'>&laquo;<span class='hidden-xs'> First</span></a></li>";

        if($paged > 1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link($paged - 1)."' aria-label='Previous'>&lsaquo;<span class='hidden-xs'> Previous</span></a></li>";



        for ($i=1; $i <= $pages; $i++) {

            if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {

                echo ($paged == $i)? "<li class=\"active\"><span>".$i." <span class=\"sr-only\">(current)</span></span>

                </li>":"<li><a href='".get_pagenum_link($i)."'>".$i."</a></li>";

            }
        }



        if ($paged < $pages && $showitems < $pages) echo "<li><a href=\"".get_pagenum_link($paged + 1)."\"  aria-label='Next'><span class='hidden-xs'>Next </span>&rsaquo;</a></li>";  

        if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<li><a href='".get_pagenum_link($pages)."' aria-label='Last'><span class='hidden-xs'>Last </span>&raquo;</a></li>";

        echo "</ul></nav>";
        echo "</div>";

    }

}

在school-single.php中列出教师的查询

<?php

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$connected = new WP_Query( array(
    'connected_type' => 'school-teacher',
    'connected_items' => get_queried_object_id(),
    'nopaging' => false,
    'posts_per_page' => 1,
    'paged' => $paged,
    ),
) );

if ( $connected->have_posts() ) :
    while ( $connected->have_posts() ) : $connected->the_post();
    ....
    endwhile;
endif;

/* Pagination */
the_pagination($connected->max_num_pages);

/* Restore original Post Data */
wp_reset_postdata();

分页显示正确:

Pagination

第2页的网址是:wwww.mywebsite.com/school/school_name/page/2当我点击它时会将我重定向到同一页面。 wwww.mywebsite.com/school/school_name

我认为单页不接受url中的参数。无论如何,有人可以提出解决方案!?

1 个答案:

答案 0 :(得分:1)

有两种方法可以完成这项工作

  1. 在分页代码中使用查询字符串只有这种方法的问题可能不是seo友好的URL
  2. 为了使这个SEO友好,你必须使用WP Rewrite API,你可以找到更多关于这个WP Rewrite API
  3. 所以选择了方便的方式