about

wordpressで日本語のスラッグ名をID表示に変更する方法(5.1.0以降)

WordPressでは記事のパーマリンク(その記事のURL名)をタイトルから自動的に抜粋するのですが、日本語でタイトルを書くと日本語でパーマリンクを作成してしまいます。本来WEBの世界はあまり日本語には優しくなく、ブラウザなどによってはURLが記号の塊に変換されたりと不具合も見られますので基本的には半角英語(ローマ字)が推奨されております。

そこでWordpressで日本語が入っていたら「post-2929」等の当たり障りのないURLに変更すると言う処理を入れたりして対応しております。

専門的な言葉を使いますと「wp_unique_post_slug」と言う関数を使用して、投稿時に判別してURLを表示させます。このwp_unique_post_slugはイマイチ効率が良くない物だったので、投稿が増えれば増えるほどボトルネックになってしまう物でした。

そこで、最近出たWordpress5.1.0より、pre_wp_unique_post_slugと言う新しい関数が使えるようになりました。これを使うと投稿によるスラッグ変更処理を変更処理の事前に用意してしまうので、負荷の低減になります。

と、言うわけですのでWordpress5.1.0以降のWordpressをお使いの場合は、パーマリンクの処理をpre_wp_unique_post_slugに変更しておくと良さそうです。

サンプル(functions.phpに追加する)

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

サンプルの内容は、日本語がタイトルに入っている場合は、「投稿タイプ-投稿ID」のパーマンリンク(スラッグ)に変更して、pre_wp_unique_post_slugに投げてます。

これをfunctions.phpに書き込めば投稿した時に日本語のスラッグ名が予め用意していたスラッグ名に変更されます。下書き中で保存した時ではまだスラッグ名が変更されないのでご注意を。

このように、パタパタワークスではWordpressの更新や作業における色々分からない部分を代行しての作業も致しております。ホームページ制作で何かありましたらお気軽にお問い合わせください。