開発者向けに、Default Permalink のフック・オプション・カスタマイズ方法をまとめています。
スラッグ置換の仕組み
wp_unique_post_slug フィルター(優先度 10、引数 4 個)にフックし、以下の条件をすべて満たす場合のみスラッグを置換します。
- オプション
df_enableの値が"Enable"である(設定画面で有効化済み) - 投稿 ID が 0 でない(
wp_insert_postの直接呼び出しで ID 未確定の場合はpost-0の衝突を防ぐためスキップ) - 投稿タイプが置換対象である(オプション未保存の場合は全公開投稿タイプが対象)
- スラッグが正規表現
/(%[0-9a-f]{2})+/にマッチする(URL エンコードされたマルチバイト文字を含む) - 投稿の
post_nameが空である(ユーザーがスラッグを明示指定していない)
置換時には post meta _dp_slug_replaced に新しいスラッグを保存し、編集画面での通知に使用します(通知の表示後に削除されます)。
オプション
| オプション名 | 値 | 説明 |
|---|---|---|
df_enable | "Enable" / "" | 機能の有効・無効 |
df_slug_format | post_type / date / random | スラッグ形式(デフォルト: post_type) |
df_post_types | 投稿タイプ名の配列 | 置換対象の投稿タイプ。未保存(v1.4 より前からのインストール)の場合は全公開投稿タイプが対象 |
default_permalink_slug フィルター
生成されたスラッグは default_permalink_slug フィルターを通るため、テーマや他のプラグインから形式を自由にカスタマイズできます。
/**
* 生成されるスラッグを「item-{投稿ID}」形式に変更する例
*
* @param string $slug 生成されたスラッグ。
* @param int $post_id 投稿 ID。
* @param string $post_type 投稿タイプ。
*/
add_filter( 'default_permalink_slug', function ( $slug, $post_id, $post_type ) {
return 'item-' . $post_id;
}, 10, 3 );
アンインストール
プラグインを削除すると uninstall.php が実行され、上記のオプションはすべて削除されます。変換済みの投稿スラッグは投稿データそのものなので、そのまま残ります。