LoginSignup
0
0

More than 5 years have passed since last update.

link rel="prev" "next"の自動出力について

Posted at

前提・実現したいこと

開発会社にオウンドメディア兼サービスサイトを制作してもらったのですが、
ページネーションされたカテゴリアーカイブページにて

<link rel="prev" href="https://hoge/page/2/>
<link rel="next" href="https://hoge/page/4/>

などの、link rel="prev"/"next"が自動挿入されません。

制作会社の方がかなりマニアックな構造にされたようで、
自動でlink rel="prev"/"next"が入らなくなったようです。

解決策や心当たりがございましたら、ご教授願います。

試したこと

以下の2種類のコードをfunctions.phpに記述しましたが、どちらとも変化はありませんでした。

///////////////////////////////////////
// Wordpressデフォルトのnext/prev出力動作を停止
///////////////////////////////////////
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');

///////////////////////////////////////
//ページネーション(一覧ページ)と分割ページ(マルチページ)タグを出力
///////////////////////////////////////
function rel_next_prev_link_tags() {
  if(is_single() || is_page()) {
      //1ページを複数に分けた分割ページ(マルチページ)でのタグ出力
    global $wp_query;
    $multipage = check_multi_page();
    if($multipage[0] > 1) {
      $prev = generate_multipage_url('prev');
      $next = generate_multipage_url('next');
      if($prev) {
        echo '<link rel="prev" href="'.$prev.'" />'.PHP_EOL;
      }
      if($next) {
        echo '<link rel="next" href="'.$next.'" />'.PHP_EOL;
      }
    }
  } else{
    //トップページやカテゴリページなどのページネーションでのタグ出力
    global $paged;
    if ( get_previous_posts_link() ){
      echo '<link rel="prev" href="'.get_pagenum_link( $paged - 1 ).'" />'.PHP_EOL;
    }
    if ( get_next_posts_link() ){
      echo '<link rel="next" href="'.get_pagenum_link( $paged + 1 ).'" />'.PHP_EOL;
    }
  }
}
//適切なページのヘッダーにnext/prevを表示
add_action( 'wp_head', 'rel_next_prev_link_tags' );

//分割ページ(マルチページ)URLの取得
//参考ページ:http://seophp.net/wordpress-fix-rel-prev-and-rel-next-without-plugin/
function generate_multipage_url($rel='prev') {
  global $post;
  $url = '';
  $multipage = check_multi_page();
  if($multipage[0] > 1) {
    $numpages = $multipage[0];
    $page = $multipage[1] == 0 ? 1 : $multipage[1];
    $i = 'prev' == $rel? $page - 1: $page + 1;
    if($i && $i > 0 && $i <= $numpages) {
      if(1 == $i) {
        $url = get_permalink();
      } else {
        if ('' == get_option('permalink_structure') || in_array($post->post_status, array('draft', 'pending'))) {
          $url = add_query_arg('page', $i, get_permalink());
        } else {
          $url = trailingslashit(get_permalink()).user_trailingslashit($i, 'single_paged');
        }
      }
    }
  }
  return $url;
}

//分割ページ(マルチページ)かチェックする
function check_multi_page() {
  $num_pages    = substr_count(
      $GLOBALS['post']->post_content,
      '<!--nextpage-->'
  ) + 1;
  $current_page = get_query_var( 'page' );
  return array ( $num_pages, $current_page );
}
function ozLinkRelPrevNext(){
  global $paged;
  if( is_archive() ) {
    if ( get_previous_posts_link() ) {
      echo "<link rel='prev' href=".get_pagenum_link( $paged-1 )." />"."\n";
    }
    if ( get_next_posts_link() ) {
      echo "<link rel='next' href=".get_pagenum_link( $paged+1 )." />"."\n";
    }
  }
}
add_action('wp_head', 'ozLinkRelPrevNext');
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0