第十二期主题分页

时间:2014-08-19 作者:Ant

一年多前,我创建了一个Wordpress博客,以“212”主题为基础创建了一个儿童主题,我做了一些小的修改。其中一个修改是添加自定义公文包内容,这样我就可以有一个公文包类别页面,链接到该类别中的各个帖子。

Issue: 最近,随着我的帖子数量的增长,有一点变得很明显,那就是当我点击主菜单/类别页面时,它会显示前10篇帖子,但如果有10篇以上的帖子,页面底部的“旧帖子”链接会提供点击,但同样的10篇帖子(最新帖子)会再次显示,尽管有13篇帖子,所以它应该翻转过来,显示最古老的3个。这个问题可以通过下面的链接看到,其他类别的帖子主要不超过10篇。coder-tronics.com/categories/c-programming

现在,如果我使用侧栏类别链接选择C编程类别,旧的和新的页面链接可以很好地正确显示所有13篇文章,这个链接演示了正确的操作。

http://coder-tronics.com/category/c-programming

我一直在努力找出我做错了什么,一年多前,我按照一个教程来做这件事,所以我对Wordpress不太熟悉。我有一个自定义内容。基于内容的php。php,以及每个投资组合类别的页面模板,如C编程等。我已经检查了自定义内容。php和它做了一些小的修改,并试图通过让C编程的公文包页面模板使用这些内容来消除这一问题。php,这对问题没有影响。

没有发布任何代码,但很乐意这样做,只是不确定此时问题在哪里,不想发布不相关的代码。

谢谢

蚂蚁

编辑添加了以下代码参考Pieter注释

    <?php
/*
Template Name: C Programming Category page
*/

get_header(); ?>

    <section id="primary" class="site-content">
        <div id="content" role="main">

        <?php query_posts(\'category_name = C Programming\'); ?>
        <?php if ( have_posts() ) : ?>
            <header class="archive-header">


            <?php if ( category_description() ) : // Show an optional category description ?>
                <div class="archive-meta"><?php echo category_description(); ?></div>
            <?php endif; ?>
            </header><!-- .archive-header -->
            <?php
            /* Start the Loop */
            while ( have_posts() ) : the_post();

                /* Include the post format-specific template for the content. If you want to
                 * this in a child theme then include a file called called content-___.php
                 * (where ___ is the post format) and that will be used instead.
                 */
                get_template_part( \'content-custom\', get_post_format() );

            endwhile;

            twentytwelve_content_nav( \'nav-below\' );
            ?>

        <?php else : ?>
            <?php get_template_part( \'content\', \'none\' ); ?>
        <?php endif; ?>

        </div><!-- #content -->
    </section><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您不应该使用query_posts 完全一切都在this post 我最近做过。查看我在那篇文章中给出的所有链接

分页不起作用的一个大问题是默认的二十一分页函数,twentytwelve_content_nav, 不提供自定义查询。但是,您可以重写此函数,因为它被包装在if ( ! function_exists() ) 条件语句。

首先,用于自定义查询。如前所述,不要也永远不要使用query_posts, 大多数情况下,它在分页时完全失败。这是你要用的WP_Query. 因此,请将您的页面模板更改为以下内容(这里只有一点,category_name 使用类别slug, 不name)

<?php
/*
Template Name: C Programming Category page
*/

get_header(); ?>

    <div id="primary" class="site-content">
        <div id="content" role="main">

        <?php
        $args = array(
            \'category_name\' => \'c-programming\'
        );

        $my_query = new WP_Query($args); ?>
        <?php if ( $my_query->have_posts() ) : ?>

            <?php /* Start the Loop */ ?>
            <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
                <?php get_template_part( \'content\', \'custom\' ); ?>
            <?php endwhile; ?>

            <?php twentytwelve_content_nav( \'nav-below\' ); ?>

        <?php else : ?>

            <article id="post-0" class="post no-results not-found">

            <?php if ( current_user_can( \'edit_posts\' ) ) :
                // Show a different message to a logged-in user who can add posts.
            ?>
                <header class="entry-header">
                    <h1 class="entry-title"><?php _e( \'No posts to display\', \'twentytwelve\' ); ?></h1>
                </header>

                <div class="entry-content">
                    <p><?php printf( __( \'Ready to publish your first post? <a href="%s">Get started here</a>.\', \'twentytwelve\' ), admin_url( \'post-new.php\' ) ); ?></p>
                </div><!-- .entry-content -->

            <?php else :
                // Show the default message to everyone else.
            ?>
                <header class="entry-header">
                    <h1 class="entry-title"><?php _e( \'Nothing Found\', \'twentytwelve\' ); ?></h1>
                </header>

                <div class="entry-content">
                    <p><?php _e( \'Apologies, but no results were found. Perhaps searching will help find a related post.\', \'twentytwelve\' ); ?></p>
                    <?php get_search_form(); ?>
                </div><!-- .entry-content -->
            <?php endif; // end current_user_can() check ?>

            </article><!-- #post-0 -->

        <?php endif; // end have_posts() check ?>
    <?php wp_reset_postdata(); ?>
        </div><!-- #content -->
    </div><!-- #primary -->

<?php get_sidebar( \'front\' ); ?>
<?php get_footer(); ?>
现在,收到twentytwelve_content_nav 函数到您的子主题函数。php。您将对此进行修改。这是修改后的代码。完成它并检查更改,我已经对这些进行了评论

function twentytwelve_content_nav( $html_id ) {
    global $wp_query, $my_query; // add your custom query variable

    $html_id = esc_attr( $html_id );

    if ( $wp_query->max_num_pages > 1 ||  $my_query->max_num_pages > 1 ) : ?> // Add your custom query to the max_num_parameter
        <nav id="<?php echo $html_id; ?>" class="navigation" role="navigation">
            <h3 class="assistive-text"><?php _e( \'Post navigation\', \'twentytwelve\' ); ?></h3>
            <div class="nav-previous"><?php next_posts_link( __( \'<span class="meta-nav">&larr;</span> Older posts\', \'twentytwelve\' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( \'Newer posts <span class="meta-nav">&rarr;</span>\', \'twentytwelve\' ) ); ?></div>
        </nav><!-- #<?php echo $html_id; ?> .navigation -->
    <?php endif;
}
这应该可以

结束

相关推荐