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

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

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

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

PHP

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

受付中

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

southern_flavor
southern_flavor

総合スコア70

WordPress

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

PHP

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

0回答

0リアクション

0クリップ

1460閲覧

投稿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

//カスタム投稿タイプの登録 $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

WordPress

previous_post_link('%link','前の記事へ'); next_post_link('%link','次の記事へ');

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

WordPress

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

PHP

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