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

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

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

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

Q&A

1回答

4418閲覧

カスタム投稿スラッグ名と固定ページ名を揃えたい

orange_drop

総合スコア25

WordPress

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

0グッド

0クリップ

投稿2017/06/29 02:32

カスタム投稿タイプで作ったslug「typeA」のトップページを
固定ページでslugと同じ「typeA」だと不具合あると思い、
「list-typeA」で作成しています。 ※理想は、「typeA」です。

この固定ページを親として、子ページをいくつか作る必要があり、
カスタム投稿タイプとは別にしたいので、固定ページで作成かな?と思っています。
ただその場合、「list-typeA」よりもURLは「typeA」にしたいのですが、
上記のことからも仕方のないことでしょうか…。

●カスタム投稿タイプ
http://sample.com/typeA/

●固定ページ(親)
http://sample.com/list-typeA/

●固定ページ(子)
http://sample.com/list-typeA/dairiten
http://sample.com/list-typeA/note

↑ list-typeA を typeA にしたい。

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ご希望は、

●カスタム投稿タイプ
http://sample.com/typeA/

●固定ページ(親)
http://sample.com/list-typeA/

●固定ページ(子)
http://sample.com/typeA/dairiten
http://sample.com/typeA/note

でしょうか。
それとも、

●カスタム投稿タイプ
http://sample.com/typeA/

●固定ページ(親)
http://sample.com/typeA/

●固定ページ(子)
http://sample.com/typeA/dairiten
http://sample.com/typeA/note

でしょうか。

後者の場合、カスタム投稿タイプ(一覧)と、固定ページ(親)のurlが重なりますが、どうすることをご希望でしょうか?

投稿2017/06/29 04:17

yukikp

総合スコア797

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

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

orange_drop

2017/06/29 04:38

可能であれば、下記が希望です。  ●カスタム投稿タイプ http://sample.com/typeA/ ●固定ページ(親) http://sample.com/typeA/ ●固定ページ(子) http://sample.com/typeA/dairiten http://sample.com/typeA/note でもURL重なるので難しいようであれば、 ●カスタム投稿タイプ http://sample.com/typeA/ ●固定ページ(親) http://sample.com/list-typeA/ ●固定ページ(子) http://sample.com/typeA/dairiten http://sample.com/typeA/note こちらでも嬉しいです。
yukikp

2017/06/29 08:31 編集

sample投稿タイプの例でしまします。 (1)sample投稿タイプの設定する際に、'has_archive' => false,にします。 (2)sample固定ページの子ページが少ない場合には、以下のようにします。 sample/abc sample/def sample/ghi の3ページの時 functions.phpで、以下のように追記します。 function my_add_rewrite_rules( $wp_rewrite ) { $new_rules = array( 'sample/$' => 'index.php?pagename=sample', 'sample/abc$' => 'index.php?pagename=abc', 'sample/def$' => 'index.php?pagename=def', 'sample/ghi$' => 'index.php?pagename=ghi', ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'my_add_rewrite_rules'); (3)管理画面の「設定>パーマリンク設定」から、特に設定は変更せず「保存」ボタンを押します。 以上です。
yukikp

2017/06/29 08:28 編集

もし、子ページを自由に作れるようにしたいなら、 sample親ページの子ページのslugをまとめた配列(例:$slugArr)を準備し、 function my_add_rewrite_rules( $wp_rewrite ) { //この関数はfunctions.phpに別記する。返値はsample親ページの子ページslugをまとめた配列とする $slugArr = get_sample_child_page_slug(); $new_rules = array( 'sample/$' => 'index.php?pagename=sample' ); //ここで、各子ページのslugを追加してあげる。 if(!empty($slugArr)): foreach($slugArr as $slug): $new_rules += array( 'sample/' . $slug . '$' => 'index.php?pagename=' . $slug ); endforeach; endif; $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'my_add_rewrite_rules'); のようにすればよいかと思います。 最後に、管理画面の「設定>パーマリンク設定」で「保存」ボタンを押すことをお忘れなく。
orange_drop

2017/06/29 08:19

ご丁寧にありがとうございます。 基本的にはカスタム投稿からのページが多く、固定ページにしたい子ページも少ないので 1つ目に紹介して頂いた方法をしたかったのですが、その場合 archive は false になるのですね。 情けないことに2つ目については、理解が全然出来ていなくて…  > sample親ページの子ページのslugをまとめた配列(例:$slugArr)を準備し、 こちらは、何で作るのでしょうか? お手間をとってしまい、申し訳ありません。
yukikp

2017/06/29 08:30

> 1つ目に紹介して頂いた方法をしたかったのですが、その場合 archive は false になるのですね。 そうですね。そうしないと、 http://hogehoge.com/sample のurlでアクセスされたときに、sample投稿タイプのアーカイブなのか、sample親ページのどちらなのかわからないからです。 ※正確に言うと、どちらなのかは、wordpressが自分の持つリライトルールにのっとり判定してくれますが。 > sample親ページの子ページのslugをまとめた配列(例:$slugArr)を準備し、 2つ目の方法では、 get_sample_child_page_slug()関数を作っていますが、例えば、 function get_sample_child_page_slug() { //返す予定の配列を準備 $children_slug_array = array(); //親ページのslugから、親ページObjectを取得 $parent = get_page_by_path( 'sample' ); //固定ページの中から、親ページIDに属する子ページをすべて取得し、そのIDを$children_slug_arrayに追加する。 $args = array( 'post_type' => 'page', 'posts_per_page' => -1, 'parent_id' => $parent->ID ); if($children = get_posts($args)): foreach($children as $child): $children_slug_array[] = $child->ID; endforeach; endif; wp_reset_postdata(); return $children_slug_array; } こんな感じでしょうか。
yukikp

2017/06/29 08:31

すみません。一つ目の例について修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問