WordPressがURLのスラッグを生成する方法を正確に説明したページがどこかにありますか?私はWordPressが生成するものと同じURLスラッグを生成する必要があるスクリプトを書いています。
すぐに、WPスラッグの生成方法に関するページ/チュートリアル/ドキュメントを提供することはできませんが、 sanitize_title()
関数を見てください。
関数名で間違った印象を与えないでください、それはnotさらなる使用のためにタイトルをサニタイズするためのものですページ/投稿タイトルとして。タイトル文字列を受け取り、URLで使用されるように返します。
mightコアが追加の処理を行うEdgeケースがあります(sanitize_title()
がalwaysはexactly期待どおりに生成できますが、少なくとも99%をカバーする必要がありますすべてではないにしても、ケース。
WordPressにはWP_DEBUG
以外に開発者モードが組み込まれていないため、この場合はあまり役に立ちません。基本的にWPは "Rewrite API" を使用します。これは、 WP_Rewrite
クラスの関数ベースの低レベルラッパーです。 Codex 。 global $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」プラグインがタブのコンテンツをどのように表示するかを示すスクリーンショットを次に示します。
Vorlage =パターン|説明=説明| Beispiele =例
「T5 Rewrite」プラグインは、リライトオブジェクトの検査に役立つ素晴らしい仕事をします。そして、さらに多くのことを行います。新しい可能性を追加します。したがって、これは(少なくとも私のインストールでは)基本的なプラグインパッケージの一部です。
あなたはこの機能を使用することができます:
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のサニタイズ機能が正確にどのように機能するかのようなものです。
実際に、あなたがコア関数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(
古い質問を再開することを許してください、しかし私はこの方法が私のために完璧に働くことが分かったのと同じ必要性を持っていました:
$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
モードでは、すべてのスペースがダッシュ-
に置き換えられ、その他の句読点が削除されます。
これが誰かに役立つことを願っています! :)