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

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

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

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

PHP

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

Q&A

解決済

複数のタクソノミーを持つカスタム投稿のパーマリンクが404エラーになる

ni-co_2130
ni-co_2130

総合スコア10

WordPress

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

PHP

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

1回答

0グッド

2クリップ

6449閲覧

投稿2018/07/04 09:07

前提・実現したいこと

WordPressにてカスタム投稿でページを作成中に404が発生しております。

仮称サイトURL:http://aaa.com/
カスタム投稿名:works
1つ目のカスタムタクソノミー : works_cat (業種)
2つ目のカスタムタクソノミー : works_type (カテゴリー)

使用プラグイン:「Custom Post Type Permalinks」

カスタム投稿タイプのパーマリンク設定:
http://aaa.com/works/%postname%/
has_archive: true / with_front: false

カスタマイズされたカスタムタクソノミーのパーマリンクを使用する。:チェックなし
カスタムタクソノミーのアーカイブに、 post_type クエリーを追加。:チェックなし

希望としては、以下のパーマリンクでページを表示したいです。

  1. 全ての実績一覧ページ http://aaa.com/works/
  2. 1つ目のタクソノミー「works_cat」のターム別アーカイブページ http://aaa.com/works/('works_cat'のターム)/
  3. 2つ目のタクソノミー「works_type」のターム別アーカイブページ http://aaa.com/works/('works_type'のターム)/
  4. シングルページ http://aaa.com/works/投稿名/

発生している問題・エラーメッセージ

functions.phpにてカスタム投稿の作成コードを記述しておりますが、
以下のコードですと、両方のターム別アーカイブページで404となります。
複数のカスタムタクソノミーを作成した経験があまりなく、心もとないソースコードですが以下に掲載いたします。

該当のソースコード

functions.php

php

1<?php 2 3//カスタム投稿の追加 4add_action( 'init', 'create_post_type' ); 5function create_post_type() { 6 7 /*実績*/ 8 register_post_type( 9 'works', array( 10 11 'labels' => array( 12 'name' => '実績', //管理画面などで表示する名前 13 'singular_name' => '実績', //管理画面などで表示する名前(単数形) 14 'menu_name' => '実績', //管理画面メニューで表示する名前(nameより優先される) 15 'add_new_item' => '新しい実績', //新規作成ページのタイトルに表示される名前 16 'add_new' => '新規追加', //メニューの新規追加ボタンのラベル 17 'new_item' => '新規追加', 18 'edit_item' => '実績を編集', //編集ページのタイトルに表示される名前 19 'view_item' => '編集', //編集ページの「投稿を表示」ボタンのラベル 20 'search_items' => '実績の検索', //一覧ページの検索ボタンのラベル 21 'not_found' => '見つかりません。', //一覧ページに投稿が見つからなかったときに表示 22 'not_found_in_trash' => 'ゴミ箱にはありません。' //ゴミ箱に何も入っていないときに表示 23 ), 24 'descriptions' => '実績の概要', //カスタム投稿ページの概要文 25 'hierarchical' => true, //falseの場合、階層構造なし 26 'public' => true, //ユーザーが内容を投稿する場合true(通常はtrue) 27 'has_archive' => true, //アーカイブページを作成するか否かを設定(trueでindexページを作成), 28 'rewrite' => array( 29 'slug' => 'works', 30 'with_front' => false 31 ), 32 'capability_type' => 'post', 33 'menu_position' => 8, 34 35 //管理画面から投稿できる項目 36 'supports' => array( 37 'title', 38 'editor', 39 'thumbnail', 40 ) 41 ) 42 ); 43 44 /*業種*/ 45 register_taxonomy( 46 'works_cat', 47 'works', 48 array( 49 'hierarchical' => true, 50 'rewrite' => array('slug' => 'works'), 51 'label' => '業種', 52 'public' => true, 53 'show_ui' => true, 54 'query_var' => true, 55 ) 56 ); 57 /*カテゴリー*/ 58 register_taxonomy( 59 'works_type', 60 'works', 61 array( 62 'hierarchical' => true, 63 'rewrite' => array('slug' => 'works'), 64 'label' => 'カテゴリー', 65 'public' => true, 66 'show_ui' => true, 67 'query_var' => true, 68 ) 69 ); 70} 71 72?>

試したこと

当初は以下のように「works_cat」を「カテゴリー」、「works_type」を「業種」として作成し、
カスタム投稿タイプのパーマリンク設定を「http://aaa.com/works/%works_cat%/%postname%/」と設定したところ、
「カテゴリー」である「works_cat」のアーカイブページはホームURL(http://aaa.com/)にリダイレクトされ、「業種」である「works_type」のアーカイブページのみ表示されました。

php

1 /*カテゴリー*/ 2 register_taxonomy( 3 'works_cat', 4 'works', 5 array( 6 'hierarchical' => true, 7 'rewrite' => array('slug' => 'works'), 8 'label' => 'カテゴリー', 9 'public' => true, 10 'show_ui' => true, 11 'query_var' => true, 12 ) 13 ); 14 /*業種*/ 15 register_taxonomy( 16 'works_type', 17 'works', 18 array( 19 'hierarchical' => true, 20 'rewrite' => array('slug' => 'works'), 21 'label' => '業種', 22 'public' => true, 23 'show_ui' => true, 24 'query_var' => true, 25 ) 26 );

試しにタクソノミー名を入れ替え、(該当のソースコードの状態となります)
あわせてカスタム投稿タイプのパーマリンク設定を「http://aaa.com/works/%works_type%/%postname%/」に変更したところ、
現在の「カテゴリー」である「works_type」のみアーカイブページが表示されました。

この時点でのパーマリンクは以下の通りです。

  1. 全ての実績一覧ページ http://aaa.com/works/
  2. 1つ目のタクソノミー「works_cat」のターム別アーカイブページ http://aaa.com/works/('works_cat'のターム)/ →404エラー
  3. 2つ目のタクソノミー「works_type」のターム別アーカイブページ http://aaa.com/works/('works_type'のターム)/
  4. シングルページ http://aaa.com/works/('works_type'のターム)/投稿名/

その後、カスタム投稿タイプのパーマリンク設定を「http://aaa.com/works/%postname%/」に変更したところ、
両方のターム別アーカイブページが404エラーとなりました。(質問の前提の状態となります)

そもそもカスタム投稿の書き方が良くない気もするのですが、改善策をご教示いただけますと幸いです。

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

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

回答1

1

自己解決

予想通り、カスタム投稿タイプ追加の記述を変更しましたところ自己解決いたしました。

投稿2018/07/07 04:04

ni-co_2130

総合スコア10

arraky👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

arraky

2019/12/10 11:05

何を記述すれば改善できたのですか?
arraky

2019/12/10 12:42 編集

回答ありがとうございます。 今試して見たのですが、できませんでした。。 成功したコードってまだ残っていたりしませんか? それか、私の質問なのですが、 答えていただけたら幸いです。 https://teratail.com/questions/228614
arraky

2019/12/10 12:55

すみません!解決しました! 本当にありがとうございました。
ni-co_2130

2019/12/10 13:10

解決されたようで何よりです! あくまで私の所感ではありますが、日本語の記事は古いバージョンや基礎的な内容が多かったので、タクソノミー関連は多言語で検索すると解決しやすい気がします。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

WordPress

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

PHP

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