【WordPress】記事のスラッグをID番号で自動生成する方法

2019年10月28日 更新:2019年10月29日 WordPress

記事のスラッグをID番号で自動生成する方法

Pocket

ポータルサイトやニュースサイトなど、記事を大量に投稿するサイトでは、スラッグを毎回英語で編集するのはとても面倒です。日本語の記事タイトルをそのまま保存すると、スラッグも日本語になってしまうため、パーマリンクの設定によっては、文字化けのような長いURLになってしまうことがあります。

そこで今回は、スラッグが重複しないように記事のID番号を自動的にスラッグとして割り当てる方法をご紹介します。(カスタム投稿タイプにも対応)

ワードプレスで作成した記事のスラッグを投稿IDの番号で自動生成するには、functions.php に次のように記載します。

/* 投稿記事のスラッグをID番号で採番 */
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 );

これでスラッグが自動的にID番号で採番されるようになります。

スラッグが数字だけの場合、他のスラッグと重複が起きる可能性がないとは言えないので、先ほどのコードを少し編集して「投稿タイプ+ID」の形でスラッグが生成されるようにカスタマイズします。

/* 投稿記事のスラッグを「post-ID」で採番 */
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 );

これで「post-123」の形でスラッグが採番されるようになりました。
先頭の「post」を投稿タイプ以外の文字列、例えば「article」にして「article-ID」の形にしたい場合は、上記コードの「utf8_uri_encode( $post_type )」の部分を編集して、「utf8_uri_encode( ‘article’ )」に書き換えればOKです。

最後にカスタム投稿タイプで作成した記事のスラッグを「カスタム投稿タイプ+ID」の形で自動生成する方法を記載します。例としてカスタム投稿タイプが「news」の場合、「news-ID」の形でスラッグを生成します。

/* カスタム投稿タイプのスラッグを {カスタム投稿タイプ}-{ID} で採番 */
function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
  if( $post_type == 'news' ) {
    $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

これで「news-123」の形でスラッグが採番されるようになりました。

いかがでしたか?スラッグが正しく生成されました?もしも記事ページにスラッグが表示されていなければ、表示オプションの「スラッグ」にチェックを入れて、スラッグが正しく表示されているか確認してください。

新規に記事を作成すると今回設定したスラッグが採番されるようになりますが、古い記事については「更新」しない限り、今回設定したスラッグには変更されません。

パーマリンク設定でスラッグがURLに表示される設定になってる場合は、事前にリダイレクト設定をするなど対策を行ってから古い記事を更新するようにしましょう。

【WordPress】管理画面の固定ページ一覧・投稿一覧にスラッグを表示する方法

Pocket