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

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

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

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

解決済

wordpress カスタム投稿タイプにおいてスラッグ表記を一種類はID名にもう一種類をページ名にしたい。

holic
holic

総合スコア132

WordPress

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

1回答

0グッド

1クリップ

185閲覧

投稿2017/08/28 02:38

編集2017/08/28 09:09

###前提・実現したいこと
カスタム投稿タイプにおいてスラッグ表記を一種類はID名にもう一種類をページ名にしたいです。
まずカスタム投稿タイプの設定をfunctions.phpに記述しました。
作りたいカスタム投稿名
①ニュース /news/
②実績 /coordination/

php

1//ニュース 2add_action('init', 'add_news_post_type'); 3function add_news_post_type() { 4 $params = array( 5 'labels' => array( 6 'name' => 'ニュース', 7 'singular_name' => 'ニュース記事', 8 'add_new' => '新規追加', 9 'add_new_item' => 'ニュース記事を新規追加', 10 'edit_item' => 'ニュース記事を編集する', 11 'new_item' => 'ニュース記事', 12 'all_items' => 'ニュース記事一覧', 13 'view_item' => 'ページを確認', 14 'search_items' => '検索する', 15 'not_found' => 'ニュース記事が見つかりませんでした。', 16 'not_found_in_trash' => 'ゴミ箱内にニュース記事が見つかりませんでした。' 17 ), 18 'public' => true, 19 'has_archive' => true, 20 'menu_position' => 5, 21 'supports' => array( 22 'title', 23 'editor', 24 'thumbnail', 25 //'author', 26 //'custom-fields', 27 //'revisions', 28 ), 29 'taxonomies' => array('news_cat') 30 ); 31 register_post_type('news', $params); 32 /* カスタムタクソノミーを定義 */ 33 register_taxonomy( 34 'news_cat', 35 'news', 36 array( 37 'label' => 'カテゴリー', 38 'hierarchical' => true,//カテゴリタイプ 39 'rewrite' => array('slug' => 'news/cat') 40 ) 41 ); 42} 43//コーディネーション実績 44add_action('init', 'add_coordination_post_type'); 45function add_coordination_post_type() { 46 $params = array( 47 'labels' => array( 48 'name' => 'これまでのコーディネイト実績', 49 'singular_name' => 'コーディネーション実績記事', 50 'add_new' => '新規追加', 51 'add_new_item' => 'コーディネーション実績を新規追加', 52 'edit_item' => 'コーディネーション実績を編集する', 53 'new_item' => 'コーディネーション実績', 54 'all_items' => 'コーディネーション実績一覧', 55 'view_item' => 'ページを確認', 56 'search_items' => '検索する', 57 'not_found' => 'コーディネーション実績が見つかりませんでした。', 58 'not_found_in_trash' => 'ゴミ箱内にコーディネーション実績が見つかりませんでした。' 59 ), 60 'public' => true, 61 'has_archive' => true, 62 'menu_position' => 5, 63 'supports' => array( 64 'title', 65 'editor', 66 'thumbnail', 67 //'author', 68 //'custom-fields', 69 //'revisions', 70 ), 71 'taxonomies' => array('coordination_cat') 72 ); 73 register_post_type('coordination', $params); 74 /* カスタムタクソノミーを定義 */ 75 register_taxonomy( 76 'coordination_cat', 77 'coordination', 78 array( 79 'label' => 'カテゴリー', 80 'hierarchical' => true,//カテゴリタイプ 81 'rewrite' => array('slug' => 'coordination/cat') 82 ) 83 ); 84}

上記を記述後にwp管理画面の「パーマリンク設定」でカスタム構造 を「/%category%/%post_id%/」に更新しましたら、カスタム投稿ページの準備が完了しました。
ここでの記事名は
・ニュース記事
/news/任意のslug名

・実績記事
/coordination/任意のslug名

となります。これを


・ニュース記事
/news/自動で与えられるID番号
・実績記事
/coordination/任意のslug名
にしたいのです。

そのために、下記の記述をしました。

php

1//カスタムポストのパーマリンクを投稿IDにする 2function myposttype_permalink($post_link, $id = 0, $leavename) { 3 global $wp_rewrite; 4 $post = get_post($id); 5 if ( is_wp_error( $post ) ) 6 return $post; 7 $newlink = $wp_rewrite->get_extra_permastruct($post->post_type); 8 $newlink = str_replace('%'.$post->post_type.'%', $post->ID, $newlink); 9 $newlink = home_url(user_trailingslashit($newlink)); 10 return $newlink; 11 } 12 add_filter('post_type_link', 'myposttype_permalink', 1, 3); 13 function myposttype_rewrite() { 14 global $wp_rewrite; 15 $wp_rewrite->add_rewrite_tag('%news%', '([0-9]+)', 'post_type=news&p='); 16 } 17 add_action('init', 'myposttype_rewrite');

記述後にwp管理画面の「パーマリンク設定」を更新しましたら、ページ名の設定がニュースも実績もID名になってしまいました。ID名になるのはニュースだけでよいのです。どのように記述を変えればよいのでしょうか。
wordpressにお詳しい方でお分かりになる方がいらっしゃいましたらご教示をお願い致します。

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

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

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

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

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

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

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

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

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

回答1

2

ベストアンサー

追記したので試してみてください。
カスタムポストニュース記事にだけ限定しているので大丈夫だと思います

if ( get_post_type() === 'news' ) { ~ }

このような形でポストタイプを指定してあげれば良いと思います。

追記

function post_type_news_slug( $link ){ global $post; if ( get_post_type() === 'news' ){ return home_url( 'news/' . $post->ID ); } else { return $link; } } add_filter( 'post_type_link', 'post_type_news_slug' ); function post_type_news_rewrite_rule(){ add_rewrite_rule( 'news/([0-9]+)?$', 'index.php?post_type=news&p=$matches[1]', 'top' ); } add_action( 'init', 'post_type_news_rewrite_rule' );

投稿2017/08/28 06:56

編集2017/08/28 09:20
退会済みユーザー

退会済みユーザー

総合スコア0

kei344, holic👍を押しています

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

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

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

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

回答へのコメント

holic

2017/08/28 08:27

ご回答ありがとうございます。 私が上記で設定したものをif文でくくるということですね。 実際にやってみましたが、上手く行きませんでした。 管理画面内でget_post_type()が反応していないのが原因なのでしょうか。
退会済みユーザー

退会済みユーザー

2017/08/28 08:52

任意のIDというのは自動で割り当てられる投稿IDのことなんでしょうか?
holic

2017/08/28 09:08

すいません、書き間違えです。 正しくは自動で与えられるID番号です。
退会済みユーザー

退会済みユーザー

2017/08/28 09:20

追記したので試してみてください。 カスタムポストニュース記事にだけ限定しているので大丈夫だと思います
holic

2017/08/28 09:28

試してみました。 目的とした挙動になりました。 ay03さん回答頂きまして本当に助かります。 ありがとうございます。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

WordPress

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