WordPressはどのようにURLスラッグを生成しますか?


17

WordPressがURLのスラッグをどのように生成するかを正確に詳述するページがどこかにありますか?WordPressが生成するものと同じURLスラッグを生成する必要があるスクリプトを書いています。


この質問に対する答えは今では時代遅れです- 代わりにcodex.wordpress.org/Function_Reference/wp_unique_post_slugを使用してください
SinisterBeard

回答:


16

すぐに、WPスラッグの生成方法に関するページ/チュートリアル/ドキュメントを提供することはできませんが、sanitize_title()機能を見てみましょう。

関数名で間違った印象を与えないでくださいページ/投稿タイトルとしてさらに使用するためにタイトルをサニタイズすることを意図したものではありません。タイトル文字列を受け取り、URLで使用されるように返します。

  • HTMLとPHPを取り除きます
  • 特殊文字を取り除きます
  • すべての文字を小文字に変換します
  • 空白、アンダースコア、ピリオドをハイフン/ダッシュで置き換えます
  • 連続する複数のダッシュを1つに減らします

そこかもしれないコアは、追加の何かをするエッジケース(あなたはそれを確認するために、ソースを見ているだろうことsanitize_title()になる常に生成するのに十分正確にあなたが期待する同じ)を、すべてではない場合、これは、少なくとも99%をカバーしなければならない、例。


1
@kaiser:T5 Rewriteに夢中になっていると思いました:)(チェックアウトする予定です)| 一般的に:タイトルが本当に長い場合、WPはナメクジを特定の最大長にトリミングします。これsanitize_titleは、関数に適用されたフィルターによっても行われるのか、または関数の実行後に他の何かによって処理されるのかが完全にはわからない場合の1つです。
ヨハネスピレ

sanitize_titleチェックアウトする必要があるのは-filterだと思います。しかし、他の関連する関数もあります。私はこれについて本当に知りませんでした。時々それSimplePieWP_Rewrite物よりも理解しやすいようです。Btw:Toschoは、「Monkeyman Rewrite Analyzer」機能のプラグインへの統合に取り組んでいます。そこから物事が本当に面白くなり始めます。
カイザー

1
URLフレンドリーなスラッグの生成についてもう少し明確にしたい場合は、sanitize_title_with_dashes()も検討してください。
トムオージェ14

5

この機能を使用できます:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

wp url sanitize関数の正確な動作の種類。


4

あなたのサービスの中核

何もありません開発者モード脇からのWordPressに組み込まれWP_DEBUG、この場合には、あまりにも多くのお手伝いをしません、。基本的に、WPは"Rewrite API"を使用します。これは、関数ベースのWP_Rewriteクラスの低レベルラッパーであり、Codexで読むことができますglobal $wp_rewriteオブジェクトは、それを検査したり、クラスと対話するためにあなたのサービスに立っています。

それを調べるのに役立つプラグイン。

Toschos "T5 Rewrite" -PluginJan Fabrys "Monkeyman Rewrite Analyzer" -Pluginがあなたの道を案内します。GitHubの「T5 Rewrite」リポジトリwikie 見つけることができる「Monkeyman Rewrite Analyzer」とスムーズに統合するために、「T5 Rewrite」の小さな拡張機能を作成しました

「Monkeyman」プラグインは、ツールの下の管理UIメニューにファイルされた新しいページを追加します。「T5 Rewrite」プラグインは、設定 > パーマリンクページに新しいヘルプタブを追加します。私の拡張機能は、前述のツールページにもヘルプタブを追加します。

「T5 Rewrite」プラグインがタブのコンテンツをどのように表示するかのスクリーンショットを以下に示します。

ここに画像の説明を入力してください

Vorlage =パターン| 説明=説明| Beispiele =例

ノート

「T5 Rewrite」プラグインは、リライトオブジェクトの検査に役立つ素晴らしい仕事をします。そして、さらに多くのことを行います。新しい可能性を追加します。したがって、それは(少なくとも私のインストールでは)私の基本的なプラグインパッケージの一部です。


2

実際、コア関数wp_insert_post(post.php)を見ると、次のことが行われていることがわかります。

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

重要なことは、wp_unique_post_slugとsanitize_titleの両方を使用することです。

wp_unique_post_slug( sanitize_title( 

0

古い質問を再開することは許しますが、この方法が私にとって完璧に機能することがわかったのと同じ必要性がありました。

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

この方法は二重消毒を使用します。

最初のものはsaveモードを使用します。このモードでは、HTMLタグとPHPタグが削除され、アクセントが削除されます(アクセント記号付きの文字はアクセント記号なしの同等の文字に置き換えられます)。

2番目のqueryモードでは、すべてのスペースがダッシュに置き換えられ-、他の句読点が削除されます。

これが誰かを助けることを願っています!:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.