起こっている問題
カスタム投稿タイプの投稿詳細ページで
**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
WordPress
1 2//カスタム投稿タイプの登録 3$supports = [ 4 'title', 5 'editor', 6 'thumbnail', 7 'revisions', 8 'excerpt', 9 'custom-fields', 10 'comments', 11 'category' 12 ]; 13$news_args = array( 14 'labels' => array( 15 'name' => 'BLOG', 16 'edit_item' => 'BLOGページを編集', 17 'add_new' => 'BLOGを新規追加', 18 'search_items' => 'BLOGページを検索', 19 ), 20 'public' => true, 21 'menu_position' => 6, 22 'has_archive' => true, 23 'supports' => $supports, 24 'rewrite' => array( 'slug' => 'blog'), 25); 26register_post_type( apply_filters( 'blog_post_type', 'blog' ), apply_filters( 'blog_post_type_args', $news_args ) ); 27 28 29//カスタム投稿タイプのタクソノミー登録 30add_action( 'init', 'news_taxonomies', 0 ); 31function news_taxonomies() { 32 register_taxonomy( 33 'blog_cat', 34 array("blog"), 35 array( 'hierarchical' => true, 'label' => 'BLOGのカテゴリ', 'query_var' => true, 36 // 'rewrite' => true 37 'rewrite' => array( 'slug' => 'cat' ) 38 ) 39 ); 40} 41 42 43//パーマリンク 44 add_filter( 'post_type_link', function( $permalink, $post, $leavename ) { 45 global $post; 46 if ( $post->post_type == 'blog' ) { 47 $term = wp_get_post_terms( $post->ID, 'blog_cat' )[0]->slug; 48 if ( $term) { 49 return esc_url( home_url( '/' )) ."blog/" . $term . "/" . $post->post_name . "/" ; 50 } else { 51 return $permalink ; 52 } 53 } 54 }, 10, 4 ); 55 56//rewrite 57add_action( 'init', function() { 58 global $wp_rewrite; 59add_rewrite_rule( 'blog/([^/]+)/([^/]+)/?$', 'index.php?blog=$matches[2]', 'top' ); 60add_rewrite_rule( 'blog/([^/]+)(/page/([0-9]+))?/?', 'index.php?blog_cat=$matches[1]&paged=$matches[3]', 'top'); 61$wp_rewrite->flush_rules( false ); 62} ); 63 64add_action( 'generate_rewrite_rules', 'my_rewrite' ); 65function my_rewrite( $wp_rewrite ){ 66 $taxonomies = get_taxonomies(); 67 $taxonomies = array_slice($taxonomies,4,count($taxonomies)-1); 68 69 foreach ( $taxonomies as $taxonomy ) : 70 71 $args['taxonomy'] = $taxonomy; 72 $args['hide_empty'] = false; 73 74 $cats = get_categories( $args ); 75 76 foreach ( $cats as $k => $v ){ 77 $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]'; 78 $new_rules['blog/'.$v->category_nicename.'/?$'] = 'index.php?post_type=blog&taxonomy='.$taxonomy.'&term='.$v->category_nicename; 79 $new_rules['blog/'.$v->category_nicename.'/page/([0-9]{1,})/?$'] = 'index.php?post_type=blog&taxonomy='.$taxonomy.'&term='.$v->category_nicename.'&paged=$matches[1]'; 80 } 81 $post_types = get_taxonomy($taxonomy)->object_type; 82 83 foreach ($post_types as $post_type){ 84 $new_rules[$post_type.'/'.$taxonomy.'/(.+?)/?$'] = 'index.php?taxonomy='.$taxonomy.'&term='.$wp_rewrite->preg_index(1); 85 } 86 $wp_rewrite->rules = array_merge($new_rules, $wp_rewrite->rules); 87 88 endforeach; 89}
single-blog.php
WordPress
1previous_post_link('%link','前の記事へ'); 2next_post_link('%link','次の記事へ');
あなたの回答
tips
プレビュー