ブログ

【WordPress】投稿画面からの「新規カテゴリー追加」や「新規タグを追加」から登録されたカテゴリやタグに自動的にスラッグを付与する方法

カテゴリーやタグは、構築の段階である程度設定しておきますが、引き渡した後はクライアント側で追加する事があります。投稿画面内の「新規カテゴリー追加」「新規タグを追加」から登録するとスラッグ無いカテゴリーやタグとなってしまい、該当ページにアクセスする時は、全角文字列がURLエンコードされてしまい「%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89」といった、訳の分からない形で変換されてしまいます。

このままではSNSで拡散してもらう際に不利になったり、何らかの詐欺サイトではないかと誤解される可能性があります。リンク切れを起こしたりするわけではないので、特にトラブルになる事はありませんが、構築する側として、スラッグが存在していないと困る事があります。

スラッグが無いと困るケース

この記事見てる方には説明の必要はないと思いますが、ループや出力の関係で登録したカテゴリーやタグのスラッグで、何らかの分岐や出力の変更をする場合に、スラッグが存在してないと困る事があります。

投稿のカテゴリにスラッグ追加

functions.phpに以下のコードを追記してください。

add_action( 'create_category', 'post_taxonomy_auto_slug', 10 );
function post_taxonomy_auto_slug( $term_id ) {
  $tax = str_replace( 'create_', '', current_filter() );
  $term = get_term( $term_id, $tax );
  if ( preg_match( '/(%[0-9a-f]{2})+/', $term->slug ) ) {
    $args = array(
      'slug' => $term->taxonomy . '-' . $term->term_id
    );
    wp_update_term( $term_id, $tax, $args );
  }
}

解説

全角文字で登録されると「category-1」の様な形でスラッグが登録されるようになります。付与されるスラッグはタクソノミー+カテゴリIDとなります。

自動変換される判定は「マルチバイト文字を含んでいるかどうか」で行われるので、通常通りスラッグを半角英数字で登録した場合はそのままスラッグとして登録され、自動変換は行われません。

ちなみにスラッグの形式を変えたい場合は、上記コードの7行目を下記の通り変更すると任意のものに変えられます。以下の例はsample-1というスラッグになります。

//変更前
'slug' => $term->taxonomy . '-' . $term->term_id
 
//変更後
'slug' => 'sample' . '-' . $term->term_id

カスタムタクソノミーにスラッグ追加

add_action()(コードの2行目)を追加するだけで対応可能です。

add_action( 'create_category', 'post_taxonomy_auto_slug', 10 );
add_action( 'create_works_cat', 'post_taxonomy_auto_slug', 10 );
function post_taxonomy_auto_slug( $term_id ) {
  $tax = str_replace( 'create_', '', current_filter() );
  $term = get_term( $term_id, $tax );
  if ( preg_match( '/(%[0-9a-f]{2})+/', $term->slug ) ) {
    $args = array(
      'slug' => $term->taxonomy . '-' . $term->term_id
    );
    wp_update_term( $term_id, $tax, $args );
  }
}

タクソノミーがtest_catの場合test_cat-1の様なスラッグになります。

タグにスラッグ追加

カスタムタクソノミーへの対応と同様に、add_action()を追加してください。

add_action( 'create_category', 'post_taxonomy_auto_slug', 10 );
add_action( 'create_works_cat', 'post_taxonomy_auto_slug', 10 );
add_action( 'create_post_tag', 'post_taxonomy_auto_slug', 10 );
function post_taxonomy_auto_slug( $term_id ) {
  $tax = str_replace( 'create_', '', current_filter() );
  $term = get_term( $term_id, $tax );
  if ( preg_match( '/(%[0-9a-f]{2})+/', $term->slug ) ) {
    $args = array(
      'slug' => $term->taxonomy . '-' . $term->term_id
    );
    wp_update_term( $term_id, $tax, $args );
  }
}
最近の記事 おすすめ記事
PAGE TOP