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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1920閲覧

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

southern_flavor

総合スコア70

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/08/20 09:19

起こっている問題

カスタム投稿タイプの投稿詳細ページで
**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','次の記事へ');

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/08/20 22:20

> 前の記事・次の記事のURLを正常に取得できないです。 というのは、何が取得されるのでしょうか? 何も帰ってこないのでしょうか?  パーマリンク変更前のリンクですか? それとも全く関係のないリンクですか? それ以外?
southern_flavor

2020/08/21 07: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/はここでは前の記事という意味です) と表示されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問