概要
wp_unique_post_slug
フィルタは、WordPressでユニークな投稿スラッグを取得するために使用されます。これはブログやウェブサイトでの投稿やページのパーマリンクが一意であることを保証し、重複や競合を避けるために非常に重要です。このフィルタは、カスタム投稿タイプやカテゴリー、タグのスラッグを生成する場合にも使用されます。以下のようなシナリオで特によく利用されます。
- ユーザーが手動でスラッグを設定した場合でも、ユニーク性を保証する。
- 自動生成されたスラッグに対して、他の既存スラッグと競合しないように補正する。
- カスタム投稿タイプを定義し、それにユニークなスラッグを生成する。
- 英数字以外の文字を含むスラッグを正規化する。
- 投稿の更新時にスラッグが重複している場合はリネームする。
- 限定的なスラッグ生成のために条件を追加する。
- スラッグ生成をカスタマイズしてSEO最適化を行う。
- 多言語サイトでスラッグが重複しないように管理する。
このフィルタに関連する関数はこちらから確認できます。
構文
add_filter('wp_unique_post_slug', 'custom_unique_slug_function', 10, 6);
パラメータ
$slug
: 提案されたスラッグ。$post_ID
: 投稿のID。$term
: ターム(カテゴリーまたはタグ)情報。$term_slug
: タームスラッグ。$filter
: 現在のフィルタ名。$post_type
: 投稿タイプ。
戻り値
このフィルタは、ユニークなスラッグを返します。返されたスラッグは、現在の投稿IDや他の条件に基づいて変更される可能性があります。
関連する関数
このフィルタに関連する関数の一覧はこちらから確認できます。
使用可能なバージョン
このフィルタはWordPress 2.1.0以降で利用可能です。現在、特定のバージョンでの非推奨または削除は確認されていません。
コアファイルのパス
wp_unique_post_slug
フィルタは、wp-includes/post.php
に含まれています。
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | 〇 |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプルコード1: ユニークなスラッグのカスタマイズ
add_filter('wp_unique_post_slug', 'custom_slug_generator', 10, 6);
function custom_slug_generator($slug, $post_ID, $term, $term_slug, $filter, $post_type) {
if ($post_type == 'custom_post_type') {
return 'custom-prefix-' . $slug;
}
return $slug;
}
このコードは、カスタム投稿タイプに対してスラッグに「custom-prefix-」というプレフィックスを追加します。
サンプルコード2: スラッグの整形
add_filter('wp_unique_post_slug', 'sanitize_slug', 10, 6);
function sanitize_slug($slug, $post_ID, $term, $term_slug, $filter, $post_type) {
return sanitize_title($slug);
}
こちらのコードは、投稿スラッグをサニタイズすることで、使用することができない特殊文字を除去します。
サンプルコード3: スラッグの重複を確認
add_filter('wp_unique_post_slug', 'check_slug_duplicate', 10, 6);
function check_slug_duplicate($slug, $post_ID, $term, $term_slug, $filter, $post_type) {
global $wpdb;
$existing_slug = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d", $slug, $post_ID));
return $existing_slug ? $slug . '-' . uniqid() : $slug;
}
このコードは、既存のスラッグと重複しているかどうかを確認し、重複している場合はユニークIDを追加します。
サンプルコード4: スラッグのリネーム
add_filter('wp_unique_post_slug', 'rename_slug', 10, 6);
function rename_slug($slug, $post_ID, $term, $term_slug, $filter, $post_type) {
return $slug . '-edited';
}
こちらは、すべての投稿スラッグの末尾に「-edited」を追加することによって、スラッグを一律にリネームします。
サンプルコード5: 多言語対応スラッグ
add_filter('wp_unique_post_slug', 'multilingual_slug', 10, 6);
function multilingual_slug($slug, $post_ID, $term, $term_slug, $filter, $post_type) {
if (function_exists('icl_object_id')) {
$slug .= '-'. ICL_LANGUAGE_CODE; // WPMLの言語コードを追加
}
return $slug;
}
このコードは、多言語サイト用に、スラッグの末尾にWPMLの言語コードを付加します。