質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.96%

カスタム投稿詳細ページで前の記事・次の記事のリンクを取得できない

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 701

起こっている問題

カスタム投稿タイプの投稿詳細ページで
previous_post_link()next_post_link()を使用しても、
前の記事・次の記事のURLを正常に取得できないです。

現状

前の記事・次の記事などの文言は表示されるものの
URLが現在のページのURLになってしまいます。

また、パーマリンク構造を変更しようと下記コードにてURLのリライトをしています。
このリライトは次のように設定されています。

カスタム投稿アーカイブ
https://hoge.com/blog/
カスタム投稿タクソノミーアーカイブ
https://hoge.com/blog_cat/
カスタム投稿タームアーカイブ
https://hoge.com/blog/apple/
カスタム投稿詳細ページ
https://hoge.com/blog/apple/sample/

このリライトの設定を消すと問題なく、前の記事・次の記事のURLを取得できますが、リライトの設定をした状態でも、カスタム投稿詳細ページ(下記、single-blog.php)で前の記事・次の記事のURLを取得する方法はないでしょうか?

ソースコード

functions.php

//カスタム投稿タイプの登録
$supports = [
    'title',
    'editor',
    'thumbnail',
    'revisions',
    'excerpt',
    'custom-fields',
    'comments',
    'category'
  ];
$news_args = array(
    'labels'          => array(
        'name' => 'BLOG',
        'edit_item' => 'BLOGページを編集',
        'add_new' => 'BLOGを新規追加',
        'search_items' =>  'BLOGページを検索',
        ),
  'public'          => true,
  'menu_position' => 6,
    'has_archive' => true,
    'supports' => $supports,
  'rewrite'         => array( 'slug' => 'blog'),
);
register_post_type( apply_filters( 'blog_post_type', 'blog' ), apply_filters( 'blog_post_type_args', $news_args ) );


//カスタム投稿タイプのタクソノミー登録
add_action( 'init', 'news_taxonomies', 0 );
function news_taxonomies() {
    register_taxonomy(
    'blog_cat',
    array("blog"),
    array( 'hierarchical' => true, 'label' => 'BLOGのカテゴリ', 'query_var' => true, 
    // 'rewrite' => true
    'rewrite' => array( 'slug' => 'cat' )
     )
    );
}


//パーマリンク
  add_filter( 'post_type_link', function( $permalink, $post, $leavename ) {
      global $post;
    if ( $post->post_type == 'blog' ) {
      $term = wp_get_post_terms( $post->ID, 'blog_cat' )[0]->slug;
      if ( $term) {
        return esc_url( home_url( '/' )) ."blog/" . $term . "/" . $post->post_name . "/" ;
      } else {
        return $permalink ;
      }
    }
  }, 10, 4 );

//rewrite
add_action( 'init', function() {
    global $wp_rewrite;    
add_rewrite_rule( 'blog/([^/]+)/([^/]+)/?$', 'index.php?blog=$matches[2]', 'top' );
add_rewrite_rule( 'blog/([^/]+)(/page/([0-9]+))?/?', 'index.php?blog_cat=$matches[1]&paged=$matches[3]', 'top');
$wp_rewrite->flush_rules( false );
} );

add_action( 'generate_rewrite_rules', 'my_rewrite' );
function my_rewrite( $wp_rewrite ){
    $taxonomies = get_taxonomies();
    $taxonomies = array_slice($taxonomies,4,count($taxonomies)-1);

    foreach ( $taxonomies as $taxonomy ) :

    $args['taxonomy'] = $taxonomy;
    $args['hide_empty'] = false;

    $cats = get_categories( $args );

    foreach ( $cats as $k => $v ){
        $new_rules['blog/'.$taxonomy.'/'.$v->category_nicename.'/page/([0-9]{1,})/?$'] = 'index.php?post_type=blog&taxonomy='.$taxonomy.'&term='.$v->category_nicename.'&paged=$matches[1]';
        $new_rules['blog/'.$v->category_nicename.'/?$'] = 'index.php?post_type=blog&taxonomy='.$taxonomy.'&term='.$v->category_nicename;
        $new_rules['blog/'.$v->category_nicename.'/page/([0-9]{1,})/?$'] = 'index.php?post_type=blog&taxonomy='.$taxonomy.'&term='.$v->category_nicename.'&paged=$matches[1]';
    }
    $post_types = get_taxonomy($taxonomy)->object_type;

    foreach ($post_types as $post_type){
        $new_rules[$post_type.'/'.$taxonomy.'/(.+?)/?$'] = 'index.php?taxonomy='.$taxonomy.'&term='.$wp_rewrite->preg_index(1);
    }
    $wp_rewrite->rules = array_merge($new_rules, $wp_rewrite->rules);

    endforeach;
}

single-blog.php

previous_post_link('%link','前の記事へ');
next_post_link('%link','次の記事へ');
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2020/08/21 07:20

    > 前の記事・次の記事のURLを正常に取得できないです。

    というのは、何が取得されるのでしょうか?

    何も帰ってこないのでしょうか? 
    パーマリンク変更前のリンクですか?
    それとも全く関係のないリンクですか?
    それ以外?

    キャンセル

  • southern_flavor

    2020/08/21 16:09

    現在のページのURLがそのまま表示されてしまっている状態です。

    例えば、
    https://hoge.com/blog/apple/sample1/
    という投稿詳細ページがあっとして、
    次のように指定すると
    previous_post_link('%link','前の記事へ');

    「前の記事へ」という文言とURLが次のように表示されます。
    <a href="https://hoge.com/blog/apple/sample1/" rel="prev">前の記事へ</a>

    リライトの設定なしだと、通常通り、
    <a href="https://hoge.com/blog/apple/sample0/" rel="prev">前の記事へ</a>
    https://hoge.com/blog/apple/sample0/はここでは前の記事という意味です)
    と表示されます。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る