web-dev-qa-db-ja.com

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

WordPressがURLのスラッグを生成する方法を正確に説明したページがどこかにありますか?私はWordPressが生成するものと同じURLスラッグを生成する必要があるスクリプトを書いています。

14
George Edison

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

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

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

mightコアが追加の処理を行うEdgeケースがあります(sanitize_title()alwaysexactly期待どおりに生成できますが、少なくとも99%をカバーする必要がありますすべてではないにしても、ケース。

14
Johannes Pille

あなたのサービスの中核

WordPressにはWP_DEBUG以外に開発者モードが組み込まれていないため、この場合はあまり役に立ちません。基本的にWPは "Rewrite API" を使用します。これは、 WP_Rewriteクラスの関数ベースの低レベルラッパーです。 Codexglobal $wp_rewriteオブジェクトは、サービスを検査したり、クラスと対話したりするためにサービスの前に立ちます。

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

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

「Monkeyman」プラグインは、管理UIメニューのToolsにファイルされた新しいページを追加します。 「T5 Rewrite」プラグインは、Settings>Permalinksページに新しいヘルプタブを追加します。私の拡張機能は、前述のTools-pageにもヘルプタブを追加します。

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

enter image description here

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

ノート

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

4
kaiser

あなたはこの機能を使用することができます:

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のサニタイズ機能が正確にどのように機能するかのようなものです。

4
Vivek Sancheti

実際に、あなたがコア関数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( 
2
Jahmic

古い質問を再開することを許してください、しかし私はこの方法が私のために完璧に働くことが分かったのと同じ必要性を持っていました:

$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モードでは、すべてのスペースがダッシュ-に置き換えられ、その他の句読点が削除されます。

これが誰かに役立つことを願っています! :)

0
GigiSan