ワードプレスのwp_unique_post_slugフィルタの使用方法・解説

概要

wp_unique_post_slugフィルタは、WordPressでユニークな投稿スラッグを取得するために使用されます。これはブログやウェブサイトでの投稿やページのパーマリンクが一意であることを保証し、重複や競合を避けるために非常に重要です。このフィルタは、カスタム投稿タイプやカテゴリー、タグのスラッグを生成する場合にも使用されます。以下のようなシナリオで特によく利用されます。

  1. ユーザーが手動でスラッグを設定した場合でも、ユニーク性を保証する。
  2. 自動生成されたスラッグに対して、他の既存スラッグと競合しないように補正する。
  3. カスタム投稿タイプを定義し、それにユニークなスラッグを生成する。
  4. 英数字以外の文字を含むスラッグを正規化する。
  5. 投稿の更新時にスラッグが重複している場合はリネームする。
  6. 限定的なスラッグ生成のために条件を追加する。
  7. スラッグ生成をカスタマイズしてSEO最適化を行う。
  8. 多言語サイトでスラッグが重複しないように管理する。

このフィルタに関連する関数はこちらから確認できます。

構文

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の言語コードを付加します。

この関数について質問する


上の計算式の答えを入力してください