WordPress|カスタム投稿タイプの個別記事のslug設定の方法|functions.php

目次

post_idが自動的にslugになる設定

投稿タイプのslugは、日本語の文字化け防止のために自動的「post_id」になるように設定している人は多いのではないでしょうか?

その場合、WordPress管理画面>設定>パーマリンク>パーマリンク構造は「/%category%/%post_id%.html/」等に設定しているはずです。

カスタム投稿では「post_id」タイプのslug設定では問題が発生する

しかし、WordPress管理画面>設定>パーマリンク>パーマリンク構造は「/%category%/%post_id%.html/」等に設定している場合に下記の問題が発生します。

  • カスタム投稿タイプでは、slugが自動でpost_idにならない
  • カスタム投稿タイプでは、自由に入力した文字列がslugとして採用されてしまう
  • その場合、文字列の種類によってはカスタム投稿タイプの個別記事が表示されなくなる(404ページ扱い)

補足ですが、functions.phpに記述したリライトルールによっては上記の問題が発生しない可能性もあります。

なお、「post_id」タイプのslug設定で、正常に機能する文字列は「英語文字列+数字」のみです。それ以外の文字列にしてしまうと404ページが表示されてしまい、カスタム投稿ページが表示されないエラーが発生します。

ちなみに上の「post_id」タイプのslug設定で、slugとして正常に使える文字列と使えない文字列の例は下のとおり。

  • slugに使える文字列の例
    • c001
    • 001
    • service01
    • dental01
  • slugに使えない文字列例
    • dental
    • general-dentisty
    • general_dentisty
    • service

カスタム投稿タイプのみ自由な文字列をslugに使う時のルール

上記命名ルールに従い、sv001などの「半角小文字英字文字列+半角数字」でslugを命名するようにすればエラーは発生しません。

ただし、ご自分でこれらのslugを考えるのが面倒な場合、下記のように自動的にpost_idがslugになるようなコードをfunction.phpに書く方法もあります。

カスタム投稿タイプのslugもpost_idを自動設定したい時

では、カスタム投稿タイプでも個別記事のslugを自動的にpost_idになるようにする設定方法はというと、下記のコードをfuntions.phpに記述すればOKです。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ($post_type == 'post') {  // 通常の投稿の場合
        $slug = $post_ID;  // スラッグを投稿IDに
    }
    elseif ($post_type == 'service') {  // カスタム投稿タイプの場合
        $slug = 's' . $post_ID;  // 's'をプレフィックスとして付ける
    }
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );

上の例と同様に、5行目の$post_type == ‘service’の「service」は、私がカスタム投稿タイプに設定したslugですので、ケースバイケースで変更して下さい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

■清水WEB制作代表
■コーディング:WordPress(オリジナルテーマ制作等)・HTML・Sass・FLOCSS・JavaScript(jQuery)等
■集客力:YouTube/Instagram/ブログでそれぞれ登録者数16000人/フォロワー13000人/月間最大アクセス50000PVの集客実績があります
■文章作成:博士号所有、会社員時代は科学雑誌に寄稿していたので文章作成も得意です
■写真技術:Amazon Kindle出版で、写真集・撮影編集解説書を5冊好評発売中です

目次