1

Wordpress テーマにカテゴリベースの数値ページネーションを実装しました。

ページネーション

これまでに行ったことは、ページ付けされた抜粋のリストを含むカスタム ページ テンプレートを作成することです。ユーザーが抜粋をクリックして記事全体を表示したら、表示される返された記事のリストにページ番号を付けたいと思います。

間違っているかもしれませんが、これはテーマの「single.php」で達成されると理解しています。

ページネーションはカスタム テンプレートで機能しますが、single.php 内でカスタム クエリを実装しようとすると、ページネーションが記事自体の中で次のページを見つけようとしていると思います。存在しない)。返されたすべての記事を単純にページ付けして、ユーザーがこのカテゴリのある記事から次の記事に移動できるようにしたいと思います。

次/前のリンクについて少し読んだことがありますが、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」オブジェクトに置き換えてページネーションを微調整する方法を説明するこのチュートリアルを見つけました。私はそれを機能させることができないようです。

このクラスのようなものを Twentyeleven テーマからカスタム テーマの「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

あなたが達成しようとしていることを完全に理解しているかどうかはわかりません。役に立たない場合は申し訳ありません。

見たところ、ページ内にカスタム ループをネストする必要があります。投稿の通常のリストをカスタマイズするだけの場合は、single.php ではなく、archive.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 に答える