web-dev-qa-db-ja.com

スラッグフォーマット:許容される文字

私はこれについて多くのグーグルをしてきたのでこのためのコーデックスエントリがあるかどうか心からお詫び申し上げますが、私の人生のために私は "スラッグ"でどんな文字が受け入れられるかについて難しいそして速い規則を見つけることができませんただし、より具体的には、このインスタンスのカスタム投稿タイプ用です。

現在、(擬似)のようなスラッグ構造を持つカスタム投稿タイプがいくつかあります。

some_Context_Thats_Not_A_Category_slug/sub_context_thats_not_a_category_slug/ +投稿のタイトル

grey内のセグメントは、その全体が「スラッグ」です。実際には、これは次のようになります。

投稿タイプスラッグとしてのhamburgers/cheeseburgers

このシナリオでは、スラッシュの使用は許可されていますか/安全ですか?

回答が受け入れられるための基準:

提起された質問への「はい」または「いいえ」、および私が現代のWPスラッグルールセットを見つけることができる場所へのリンク。

前もって感謝します!

5
Brandt Solovij

いいえ、スラッシュにスラッシュを使用することはできません。ただし、ポスト編集画面のスラグにスラッシュを含めると、自動的に削除されます。ナメクジはsanitize_title()を使って消毒されます。

残念ながら、ナメクジの中で何が許されているのか、また許されないのかを説明する簡単な方法はありません。有効なナメクジが守らなければならない単純な規則のセットを与えることは言うまでもない。しかし、スラグの最も重要な特徴を非常に簡潔にまとめることができます。 スラグは、2文字以上のダッシュを含まない、小文字の英数字、ダッシュとアンダースコアで構成されます(アンダースコアのシーケンスare許可されています。さらに、スラグはハイフンで開始または終了できません。

sanitize_title()

パラメーター:

  • $title:消毒するタイトル
  • $fallback_title(オプション、デフォルトは空文字列):サニタイズされた$titleが空の場合に使用するスラッグ
  • $content(オプション、デフォルトは 'save'):文字列がサニタイズされる操作

関数sanitize_titleは次のように振る舞う(デフォルトでは、デフォルトの$fallback_title$context引数を使い、外部フィルタは適用しない)。

  1. "é"や "Ö"などのアクセント記号付き文字は、対応する "アクセントなし"文字に置き換えられます(この例では、それぞれ "e"と "O")。
  2. 結果の文字列でsanitize_title_with_dashes()が呼び出されます

より長く(そしてより完全な)説明は以下にあります。

sanitize_title_with_dashes()

$titleパラメータ以外に、sanitize_title_with_dashes()にはさらに2つの引数があります。最初の引数は使用されず、2番目の引数は$contextから渡されるsanitize_titleという内容です。したがって「保存」します。 sanitize_title_with_dashes()は多くのことをしているので、私はそれが文字列をサニタイズするためにどんなステップのシーケンスを実行するかを説明しようとします。

  1. すべてのHTMLタグが取り除かれます
  2. オクテットのものを除いてパーセンテージ記号は削除されます(スペースのための%20のように)
  3. 文字列は小文字に変換されます
  4. &などのすべてのHTMLエンティティが削除されます
  5. すべてのドット(.)はハイフン(-)に置き換えられます
  6. 半角ダッシュと全角ダッシュ( ダッシュ上のWikiPedia )、およびスペースは、ハイフンに変換されます。
  7. アクセント(Graveアクセントなど)などの特殊文字は削除されます
  8. "times"文字( × )は "x"に置き換えられます。
  9. 英数字、スペース、ハイフン、およびアンダースコアを除くすべての文字が削除されます
  10. ハイフンのシーケンス(1行に2つ以上のハイフン)は単一のハイフンに置き換えられます
  11. 前後のハイフンは削除されます

そして、あなたはそれを持っています、完全なタイトル - サニタイズ・プロセス!

13
engelen