前提・実現したいこと
開発会社にオウンドメディア兼サービスサイトを制作してもらったのですが、
ページネーションされたカテゴリアーカイブページにて
<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');