wp_unique_post_slug:WordPressの投稿とタームに日本語slugをつけない

2017/04/21

(更新日:2023/10/19

wp_unique_post_slug:WordPressの投稿とタームに日本語slugをつけない

カスタム投稿の投稿画面で、タイトル変更できるデフォルトの状態だとslugを自分で入れないと日本語タイトルがURLになります。

重要なページは自分でURLを変えたいけど、それ以外は適当な数字にして!というときですね。

あと、タームの方も同じく日本語slugになってしまうのを回避するために、乱数でも良いので英数字にしたい場合。

投稿のslugに日本語入れない

投稿タイトルに英数以外が入っていたら投稿IDに置き換えます。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
        $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
    }
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );

タームのslugに日本語をいれない

タームは登録時点ではterm_idは取得できないので、苦し紛れに乱数に。

参考:ランダムな英数字の文字列を作成
http://qiita.com/TetsuTaka/items/bb020642e75458217b8a

function auto_term_slug( $slug, $term ) {
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
        $slug = $term->taxonomy .'-'. makeRandStr(8);
    }
    return $slug;
}
add_filter( 'wp_unique_term_slug', 'auto_term_slug', 10, 4  );

// 乱数生成
function makeRandStr($length = 8) {
    static $chars = '0123456789';
    $str = '';
    for ($i = 0; $i < $length; ++$i) {
        $str .= $chars[mt_rand(0, 9)];
    }
    return $str;
}