投稿や固定ページのスラッグを自動設定する方法

WordPressで投稿や固定ページを公開するとスラッグ(URLになる部分)が自動的に設定されます。

通常はタイトルから引用されてスラッグに設定されるので、日本語のURLになります。

パーマリンクの設定を変えることで、URLを数字だけにしたりは出来ますが、細かい設定できません。

結局、通常の設定で運用している方も多いのではないでしょうか。

そこで今回は、スラッグが重複しないように記事のIDを用いてスラッグが自動的に設定される方法をご紹介します。

投稿や固定ページには作成された時にIDが割り振られています。このIDは数値で構成されていて、WordPress全体を通して、唯一の数値が割り振られています。

この数値を活用することで、重複しないスラッグを設定することができます。

投稿の時だけ自動設定する場合

投稿の時だけ「12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'post' ) {
    $slug = $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

固定ページの時だけ自動設定する場合

固定ページの時だけ「12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'page' ) {
    $slug = $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

カスタム投稿タイプの時だけ自動設定する場合

カスタム投稿タイプの場合は2行目の'カスタム投稿タイプ''blog''portfolio'に変更すれば出来ます。

カスタム投稿タイプの時だけ「12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'カスタム投稿タイプ' ) {
    $slug = $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

設定をすると「投稿タイプ-ID」になります。

投稿の時だけ自動設定する場合

投稿の時だけ「post-12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'post' ) {
    $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

固定ページの時だけ自動設定する場合

固定ページの時だけ「page-12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'page' ) {
    $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

カスタム投稿タイプの時だけ自動設定する場合

カスタム投稿タイプの場合は2行目の'カスタム投稿タイプ''blog''portfolio' などのカスタム投稿タイプに変更すれば出来ます。

カスタム投稿タイプの時だけ「カスタム投稿タイプ-12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if ( $post_type == 'カスタム投稿タイプ' ) {
    $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

すべての投稿で自動設定する場合

途中にある条件分岐(if)を削除すればどんな投稿の場合でも自動設定されます。

投稿タイプ-12345」になります。

function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

状況に応じて使い分けが必要

スラッグの自動設定は英語や日本語で入力するよりも、短くなり、何より自分で毎回設定しなくて済むので、とても便利です。

しかし、英語や日本語で表現されているURLでは無いので、ユーザーからはページのURLがなんのURLなのかわかりにくいです。

状況に応じて使い分けることが重要です。

  • 自動設定するとスラッグを入力しなくて済んで楽
  • 状況に応じて使い分ける

いかがでしたでしょうか、とても便利なのでスラッグが毎回入力するのが面倒なものに使うと良いです。