🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

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

Q&A

解決済

4回答

1959閲覧

Wordpressで同じスラッグはどうしたら使えますか?

gorimaz

総合スコア26

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/12/01 18:19

編集2019/12/02 05:51

前提・実現したいこと

Wordpress初心者です。
カテゴリーを「red」と「pink」と作り、それぞれに同じ「smith」というスラッグで記事を投稿したいです。

発生している問題

同じスラッグを投稿すると「-2」が付与されてしまいます。

たとえば「red/smith」の投稿を完了し、次に「pink/smith」を投稿しようとすると「pink/smith-2」となってしまいます。

該当のソースコード

ソースコードは特にありません。通常の管理画面からの投稿で生じる問題になります。

試したこと

・別途投稿したらどうかと思い、「wp_insert_post()」という関数を使って投稿しても同じで、「-2」が強制的に付与されてしまいました。

・アクションフックで「draft_to_publish」を使ってみたのですが、これもやはり「-2」が付与されてしまいました。

補足情報

Wordpressは一番新しいバージョンで「5.0.3」を使用しています。

##理由
同じスラッグを使いたい理由はこうです。

すでに2つのサイト「red.com」と「pink.com」がありまして、それぞれに
http://red.com/smith/
http://pink.com/smith/
というアドレスが存在しています。

今回Wordpressで作成している「example.com」は、上記のサイトと関連づけたいがために、
http://example.com/red/smith
http://example.com/pink/smith
として、同じ「smith」というスラッグを使いたいのです。

もし可能でしたらよろしくお願い致します。

###自分なりのアプローチ
さらに考えたのですが、以下コードを書いて「スラッグにハイフンを含められるようにする」というアプローチはいかがでしょうか。

php

1remove_filter('sanitize_title', 'sanitize_title_with_dashes'); 2add_filter('sanitize_title', function($title, $raw_title = '', $context = 'display'){ 3 if(seems_utf8($title)){ 4 $title = utf8_uri_encode($title, 200); 5 } 6 return $title; 7});

このコードによって下図のようにできます。
イメージ説明

つまり「smith」という同じスラッグではなくて、「red/smith」と「pink/smith」という別のスラッグとして処理できるのではないかと考えました。

このアプローチについて、何か想定される懸念などございませんでしょうか?

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

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

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

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

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

guest

回答4

0

スラッグを同じにすることはできません。

スラッグを重複させる方法を過去に調べた感じでは、WordPress 本体のコードにかなり手を入れないと対応できそうもなかったので、途中で諦めたことがあります。

おそらく、現実的な対応方法としては、投稿のスラッグを red-smith や pink-smith のような カテゴリー-スラッグ のようなスラッグにして、WP Rewrite を駆使して、/red/smith や /ponk/smith と一致した場合に red-smith や pink-smith のスラッグを持つページを表示するようにすることと思います。

WP Rewrite で、特定の URL だけに対応するのは比較的容易と思いますが、汎用的なルールを作成して対処するのはかなり大変と思います。

投稿2019/12/01 23:21

CHERRY

総合スコア25218

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

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

gorimaz

2019/12/02 04:40

やはりハイフン区切りとリダイレクトが楽そうですね。アドバイスありがとうございます。
gorimaz

2019/12/02 05:52

お世話になっております。その後「自分なりのアプローチ」を質問に追記させて頂きました。これについて何か想定される懸念等ございましたら、引き続き宜しくお願い致します。
guest

0

ベストアンサー

URLがそうなればいいのであれば
カテゴリーではなく親ページでならいけます

投稿2019/12/01 23:11

KazuhiroHatano

総合スコア7819

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

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

gorimaz

2019/12/02 04:39

親子関係が持てるんですね。今回の「red」と「pink」は固定ページでも構わないのですが、「smith」ページは記事ページでと考えています。(smith, chris, pat, alex, などたくさんあるため、記事ページが自然という認識です。)では、親子関係は記事ページでも作れますか?検索した情報はどこも固定ページでの親子関係に関するもののようで、もしご存じであればそれも教えて頂けますでしょうか。
gorimaz

2019/12/02 05:38

なるほど、ありがとうごいます。投稿タイプ作成時にhierarchicalをtrueにするんですね。
KazuhiroHatano

2019/12/02 05:48

通常投稿・固定ページ・メディアなどのデフォルトの投稿タイプは プラグインに処理が回ってきた時点ですでに登録されてるんで 基本的にはグローバル変数$wp_post_typesを直に上書きします 先に上げたリンク先の回答の中にregister_post_type_argsを使ってるやつがいますが これでは確かデフォルトの投稿タイプの設定を変えることはできなかったはずです
gorimaz

2019/12/02 05:56

ということは、先のリンク先ではチェックマークがついた先頭の回答が適切な処理であるということですか。Wordprssはよく理解していないとヤケドしちゃいますね。 ところで、あれから「自分なりのアプローチ」を考えて質問に追記してみました。もしよかったらご忠告など頂けませんでしょうか。「階層関係を持たせる」でなく「スラッグとして処理する」というものです。
KazuhiroHatano

2019/12/02 06:05 編集

スラッグに/入れたら多分正常にパスを解析できなくなっちゃって、 WPはページを見つけられ無くなるんじゃないかと思います あるいはそういう事態を防ぐためにWPは スラッグ中の/は別の文字に置き換えられるかするんじゃないかと
gorimaz

2019/12/02 07:43

なるほどですねwつらみです・・
gorimaz

2019/12/02 09:24

仰る通りのようで $page = get_page_by_path( 'red/smith', OBJECT, 'mypost' ); が取得できませんでした。 奮闘の記録と、派生質問が生じたので、もしお時間ございましたらこちらも宜しくお願い致します。 https://teratail.com/questions/226868
KazuhiroHatano

2019/12/02 13:45

話が最初のコメに戻りますが、通常投稿か固定ページかは記事の数ではなく 「最新の○○件の投稿一覧」に出力されるべきものか否かで決めると良いかと思います
gorimaz

2019/12/02 13:58

ありがとうございます。そこを知りたい意図を文章に匂わせていたので、拾って頂き嬉しく思いますw勉強になるいくつものご返信に感謝申し上げます。
guest

0

そういう仕様なので(そう簡単には)できません。
ルーティングをご自身で再設計されるなら一応可能だとは思いますが、他の機能に干渉しないように丁寧に設計しなおすのはそれなりに難しいと思います。
(以前やろうとして面倒になって諦めたので、簡単にできる方法があるなら私も知りたい)

投稿2019/12/01 18:33

kei344

総合スコア69596

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

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

gorimaz

2019/12/01 18:42 編集

ご回答ありがとうございます。くやしいですね…。引き続き調査してみます。もし簡単にできる方法を見つけたらここでお知らせいたします。
gorimaz

2019/12/02 05:52

お世話になっております。その後「自分なりのアプローチ」を質問に追記させて頂きました。これについて何か想定される懸念等ございましたら、引き続き宜しくお願い致します。
guest

0

別件で関連質問へご回答を頂いたことにより、本件の質問は不要となりました。

別件の方で有力なアドバイスをくださったことと、そして本件でも質問内容の可否に留まらず新たな方向性を示してくださった点に鑑みて、KazuhiroHatano様を本件でもベストアンサーとさせて頂ければと思います。

kei344様、KazuhiroHatano様、CHERRYY様、みなさまありがとうございました。

投稿2019/12/04 09:19

編集2019/12/04 09:49
gorimaz

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問