サポート » テーマ » 投稿ページ内のnextpageで分割している記事のURLをprevとnextに指定したい

  • 解決済 takanamishi

    (@takanamishi)


    ・使用しているプラグインとテーマの情報(名称、入手先 URL、バージョン)
    Twenty Ten 1.2

    headにデフォルトで挿入されるrel=”prev”とrel=”next”を削除し、投稿ページ内の<!--nextpage-->で分割している記事のURLをprevとnextに指定したいと考えています。

    例)
    記事の本文は…

    1ページ目
    <!--nextpage-->
    2ページ目
    <!--nextpage-->
    3ページ目

    URLは…
    http://test.com/archives/test (1ページ目)
    http://test.com/archives/test/2 (2ページ目)
    http://test.com/archives/test/3 (3ページ目)

    上記で、http://test.com/archives/test/2のページを閲覧したとき、

    <link rel="prev" title="***" href="http://test.com/article/test">
    <link rel="next" title="***" href="http://test.com/article/test/3">

    とheadに記述したい。

    閲覧中の投稿ページが複数ページで構成されているかを$numpagesで判別しようと思ったのですが、投稿ページのループ内でしか値を取得することができません。

    ●loop-single.php

    <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
    <?php
      global $numpages;
      echo $numpages;
    ?>

    の出力結果では$numpagesに値が返却されますが、

    <?php
      global $numpages;
      echo $numpages;
    ?>
    <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

    では値がnullとなります。

    $numberpages以外で、閲覧中の投稿ページが複数ページで構成されているかを判別する方法はないでしょうか。宜しくお願いします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    takanamishiさん、こんにちは。

    $pages = count( explode('<!--nextpage-->', $post->post_content) ) ;

    でどうでしょう。

    こんにちは

    勘違いしていたら、ごめんなさい

    header.phpに、

    <?php
    $my_args = array('before' => '' , 'after' => '' , 'link_before' => '' , 'link_after' => '' , 'next_or_number' => 'next' , 'nextpagelink'=> 'next' , 'previouspagelink' => 'prev' , 'pagelink' => '%' , 'more_file' => '' , 'echo' => false );
    
        if( have_posts() ){
         while( have_posts() ){
            the_post();
    
    			$custom_nav_link = wp_link_pages( $my_args );
    			$custom_nav_link = preg_replace( '|([^>]*<a href=")([^"]+)(">)([^<]+)</a>|',"<link rel=\"$4\" href=\"$2\" />\n", $custom_nav_link );
    
    			echo $custom_nav_link;
    
    	 }
        }
    	rewind_posts();
    ?>

    nextpageが含まれるかどうかは、空かどうかで、チェックできるかも

    トピック投稿者 takanamishi

    (@takanamishi)

    >>jim912さん
    記述いただいた内容で取得ができました。記事情報を取得してnextpageを区切り文字としてカウントすればよかったのですね。ページの表示速度にもほとんど影響なく、無事に処理が行えました。大変勉強になりました。ありがとうございます。

    >>nobitaさん
    $custom_nav_linkがnullかどうかを判別することで、複数ページに渡る記事かを判別することができました。ご回答いただきありがとうございます。

    いただいたアドバイスを参考に下記のように対応しました。

    ●function.phpに追加

    //rel next,prevの削除
    remove_action('wp_head','adjacent_posts_rel_link_wp_head',10);

    ●header.phpのhead内に追加

    <?php if( is_single() ) : ?>
      <?php $pages = count( explode('<!--nextpage-->', $post->post_content) ) ; ?>
      <?php if ( $pages > 1 ) : ?>
        <?php if ( $page == $pages ) : // 最後のページ ?>
          <?php if ( $page == 2 ) : ?>
            <link rel="prev" href="<?php the_permalink(); ?>">
          <?php else : ?>
            <link rel="prev" href="<?php the_permalink(); ?>/<?php echo $page - 1; ?>">
          <?php endif; ?>
        <?php else : ?>
          <?php if ( $page == 0 ) : // 1ページ目 ?>
            <link rel="next" href="<?php the_permalink(); ?>/<?php echo $page + 2; ?>">
          <?php else : // 他のページ ?>
            <?php if ( $page == 2 ) : ?>
              <link rel="prev" href="<?php the_permalink(); ?>">
            <?php else : ?>
              <link rel="prev" href="<?php the_permalink(); ?>/<?php echo $page - 1; ?>">
            <?php endif; ?>
            <link rel="next" href="<?php the_permalink(); ?>/<?php echo $page + 1; ?>">
          <?php endif; ?>
        <?php endif; ?>
      <?php endif; ?>
    <?php endif; ?>

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「投稿ページ内のnextpageで分割している記事のURLをprevとnextに指定したい」には新たに返信することはできません。