0

我整晚都在努力完成这项工作,但似乎我找不到问题所在。我正在使用 Bootstrap 制作一个新主题,此外,我还有一小段用于自定义页面导航的代码,它似乎可以与基本的 WordPess 帖子列表一起正常工作。

但是我添加了一个名为画廊的新自定义帖子类型,但我找不到关于如何列出画廊自定义帖子类型中的所有帖子并使分页工作的解决方案。到目前为止,我已经创建了一个名为 archive-galleries.php 的新文件,它列出了所有具有画廊自定义帖子类型的帖子,但它不会转到第二页。我得到错误404 not found

这是archive-galleries.php页面的代码

<?php get_header(); ?>
<?php get_sidebar('top'); ?>
<div class="row">
    <div class="span8">
    <?php the_post(); ?>
    <h3 class="text-error"><?php _e('Latest image galleries', 'vt-translate'); ?></h3>
    <?php $count = 0;
    $paged = intval(get_query_var('paged'));
    $paged = ($paged) ? $paged : 1; 

    $query_arguments = array(
    'post_type' => 'galleries',
    'posts_per_page' => 4,
    'paged' => $paged,
    );
    // Query posts
    query_posts( $query_arguments );
     while ( have_posts() ) : the_post();
    $open = !($count%4) ? '<div class="row">' : '';
    $close = !($count%4) && $count ? '</div>' : '';
    echo $close.$open;
    ?>
        <div class="span2">
            <a href="<?php the_permalink() ?>">
                <img class="thumb" data-src="holder.js/160x250" alt="<?php the_title(); ?>" src="<?php bloginfo('template_url'); ?>/inc/timthumb.php?src=<?php echo get_post_meta($post->ID, 'thumb', true); ?>&h=250&w=160&zc=1" />
            </a>
            <div class="clearfix"></div>
            <h6>
                <a href="<?php the_permalink() ?>"><?php trim_title(); ?></a>
            </h6>
        </div>
    <?php 
    $count++;
    endwhile; 
    echo $count ? '</div>' : '';
    ?>
    </div>
    <div class="span4">
            <?php get_sidebar('pageright'); ?>
    </div>
</div>
<div class="pagination pagination-centered">
    <?php page_navi(); ?>
</div><!-- #nav-below -->
<?php get_sidebar('belownavigation'); ?>
<?php get_footer(); ?>

这是我用于分页的自定义代码,位于 functions.php 文件中:

//Wordpress page navigation with numbers
function page_navi($before = '', $after = '') {
    global $wpdb, $wp_query;
    $request = $wp_query->request;
    $posts_per_page = intval(get_query_var('posts_per_page'));
    $paged = intval(get_query_var('paged'));
    $numposts = $wp_query->found_posts;
    $max_page = $wp_query->max_num_pages;
    if ( $numposts <= $posts_per_page ) { return; }
    if(empty($paged) || $paged == 0) {
        $paged = 1;
    }
    $pages_to_show = 7;
    $pages_to_show_minus_1 = $pages_to_show-1;
    $half_page_start = floor($pages_to_show_minus_1/2);
    $half_page_end = ceil($pages_to_show_minus_1/2);
    $start_page = $paged - $half_page_start;
    if($start_page <= 0) {
        $start_page = 1;
    }
    $end_page = $paged + $half_page_end;
    if(($end_page - $start_page) != $pages_to_show_minus_1) {
        $end_page = $start_page + $pages_to_show_minus_1;
    }
    if($end_page > $max_page) {
        $start_page = $max_page - $pages_to_show_minus_1;
        $end_page = $max_page;
    }
    if($start_page <= 0) {
        $start_page = 1;
    }

    echo $before.'<ul>'."";
    if ($paged > 1) {
        echo '<li class="prev"><a href="'.get_pagenum_link().'" title="First">'.__('&laquo;','vt-translate').'</a></li>';
    }

    $prevposts = get_previous_posts_link('&laquo; Previous');
    if($prevposts) { echo '<li>' . $prevposts  . '</li>'; }
    else { echo '<li class="active"><a href="#">&laquo; Previous</a></li>'; }

    for($i = $start_page; $i  <= $end_page; $i++) {
        if($i == $paged) {
            echo '<li class="active"><a href="#">'.$i.'</a></li>';
        } else {
            echo '<li><a href="'.get_pagenum_link($i).'">'.$i.'</a></li>';
        }
    }
    echo '<li class="">';
    next_posts_link('Next &raquo;');
    echo '</li>';
    if ($end_page < $max_page) {
        echo '<li class="next"><a href="'.get_pagenum_link($max_page).'" title="Last">'.__('&raquo;','vt-translate').'</a></li>';
    }
    echo '</ul>'.$after."";
}
4

1 回答 1

0

我找到了解决方案,或者它是一种解决方法,由于某种原因,自定义帖子类型存档与默认存档的工作方式不同。

所以解决方法的主要问题是永久链接,所以我不得不使用不同的自定义帖子类型名称和自定义页面模板。

在我的functions.php 文件中,我有代码在其中注册名为画廊的自定义帖子类型。但是由于我想使用画廊来列出所有帖子,所以我将这样命名我的页面,并且我必须将重写规则添加到我的自定义帖子类型中,因此注册我的自定义帖子类型的功能现在看起来像这样。

function my_custom_post_product() {
$labels = array(
    'menu_name'             => 'Galleries',
    'all_items'             => __( 'All Posts' ),
);
$args = array(
    'labels'                => $labels,
    'description'           => 'Add image galleries custom posts',
    'public'                => true,
    'exclude_from_search'   => true,
    'show_in_nav_menus'     => true,
    'show_in_menu'          => true,
    'capability_type'       => 'post',
    'menu_position'         => 5,
    'supports'              => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ),
    'has_archive'           => true,
    'rewrite' => array('slug' => 'gallery'),
    '_builtin' =>  false
);
register_post_type( 'galleries', $args );
}
add_action( 'init', 'my_custom_post_product' );

因此,我的自定义帖子现在不使用画廊,而是使用画廊 slug。

现在要列出我画廊中的所有帖子,我使用了archive-galleries.php页面中的代码并创建了名为page-galleries.php的新页面模板,并添加了archive-galleries.php中的代码。

现在我刚刚创建了新页面,选择了我新创建的画廊模板并保存了页面。在菜单中添加了新页面,它可以工作。

关于如何使自定义帖子类型的分页工作在互联网上有很大的争论,并且由于某种原因它不能像常规归档工作那样工作,即使它打算与 archive-custom_post_type_slug.php 一起工作,这只是我制作的唯一工作解决方法我的自我和主要问题是互联网上的许多人都忽略了(就像我一样),您不能将页面命名为与帖子类型 slug 相同的名称,并且归档不适用于永久链接默认设置。

于 2013-05-20T06:40:03.513 回答