1

我在我的 Wordpress 主题中实现了基于类别的数字分页:

分页

到目前为止,我所做的是创建一个带有分页摘录列表的自定义页面模板。一旦用户单击摘录以查看完整文章,我还想对显示的返回文章列表进行分页。

据我了解,这是在主题的“single.php”中实现的,尽管我可能错了。

分页适用于我的自定义模板,但是当我尝试在 single.php 中实现自定义查询时,我认为分页试图在文章本身中找到下一页,这不是我想要实现的(因为它没有t 存在)。我想简单地对所有返回的文章进行分页,以便用户可以从该类别中的一篇文章导航到下一篇和上一篇文章到下一篇。

我已经阅读了一些关于下一个/上一个链接的内容,但我更愿意使用像Boutros AbiChedid 的这篇博文之类的东西——我为我的自定义页面模板偷了这个想法,这太棒了!

我在主题的“template.php”中制作了这个类的派生类,作为我的自定义主题的分页,它工作得很好,但是在让这个通过返回的单个帖子工作时我错过了一些东西。

我是否应该放弃并使用另一个自定义页面模板,该模板每页显示 1 篇完整文章,我知道我的分页就像魅力一样?我可以这样做,但我想把它做好。这就是目标。

这是我目前在 single.php 中的内容:

get_header(); ?>

    <div id="primary">
        <div id="content" role="main">

      <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
      <?php $wp_query = new WP_Query('category_name=news_and_updates&showposts=1&paged=' . $paged);
        while ($wp_query->have_posts()) : $wp_query->the_post();
        ?>

                <?php get_template_part( 'content', 'single' ); ?>

                <?php comments_template( '', true ); ?>

            <?php endwhile; ?>

    <?php if (function_exists("pagination")) {
      pagination($wp_query->max_num_pages);
    } ?>

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

我发现本教程解释了如何通过用“paginate_links”对象替换下一个/上一个链接来调整分页。我似乎无法让它工作。

我知道我需要从 211 主题中添加类似此类的内容到自定义主题的“functions.php”中,然后将其自定义为使用数字分页并在 single.php 或 single-content.php 中调用它:

if ( ! function_exists( 'twentyeleven_content_nav' ) ) :
/**
 * Display navigation to next/previous pages when applicable
 */
function twentyeleven_content_nav( $nav_id ) {
    global $wp_query;

    if ( $wp_query->max_num_pages > 1 ) : ?>
        <nav id="<?php echo $nav_id; ?>">
            <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentyeleven' ); ?></h3>
           <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts', 'twentyeleven' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?></div>
        </nav><!-- #nav-above -->
    <?php endif;
}
endif; // twentyeleven_content_nav

/**
 * Return the URL for the first link found in the post content.
 *
 * @since Twenty Eleven 1.0
 * @return string|bool URL or false when no link is present.
 */
function twentyeleven_url_grabber() {
    if ( ! preg_match( '/<a\s[^>]*?href=[\'"](.+?)[\'"]/is', get_the_content(), $matches ) )
        return false;

    return esc_url_raw( $matches[1] );
}

我将继续编辑这篇文章,直到我弄清楚这一点,除非有人在回答之前做过这件事。

4

1 回答 1

0

我不确定我是否完全理解您想要实现的目标,所以如果这没有帮助,我深表歉意。

从外观上看,您希望在页面内嵌套自定义循环。如果您只想自定义一个常规的帖子列表,那么您应该查看archive.php,而不是single.php。查看此层次结构以了解不同模板类型的详细信息。在最简单的形式中,存档页面用于显示多个帖子 (archive.php),而单个页面用于显示单个帖子/页面 (single.php)。

对于页面内的自定义循环,避免使用 $wp_query,因为它用于您正在查看的实际页面并将驱动

对于分页,我同意本教程并使用paginate_links。使用一点 CSS,这应该会给您想要的效果。

所以总而言之,查询应该看起来像这样,几乎是最简单的形式。

$args=array(); // Set $args with whatever parameters for your query
$args['category_name']='news_and_updates';
$args['showposts']=1;
$args['paged']=(get_query_var('paged') ? get_query_var('paged') : 1); // Get the current page, or show page 1.
$search=new WP_Query($args) 
  if($search->have_posts()) :
      while($search->have_posts()) : $search->the_post();
        the_title(); // Whatever for displaying each post.
        the_excerpt();
      endwhile;
    /* Pagination - This assumes you have 'pretty permalinks'. */
    $ulpn=99999999; // Should be a bigger number than the number of pages you'll ever produce.
    $pagination=paginate_links(array(
      'base'=>str_replace($ulpn,'%#%',esc_url(get_pagenum_link($ulpn))),
      'format'=>'/page/%#%',
      'current'=>max(1,get_query_var('paged')),
      'total'=>$search->max_num_pages,
      'prev_text'=>'<',
      'next_text'=>'>',
      'type'=>'array')); // There are other parameters you can use to customise this - check the codex using the link above.
      if($pagination) { ?>
        <div class="pagination"><?php foreach($pagination as $page) { echo $page; } ?></div>
      <?php }
  else : ?>
    <h2>Sorry, no results found</h2>
    <p>Try searching, or using the menu to find what you're looking for.</p> // Handle no results with whatever message
  endif;
于 2012-08-18T18:42:02.387 回答