WordPressでスラッグの重複を避ける方法

WordPressでスラッグの重複を避ける方法

wordpressで投稿を管理する場合、スラッグの重複を避けるようにしたいことがあると思います。

スラッグ重複を完全に避ける場合と、重複するのかチェックのみしたい場合の二通り紹介します。

スラッグが重複している場合通常は「○○-2」という形になるのでエラーは起こりません。

ですが、避けておきたい事象でもあると思います。

特に同一の記事内容である場合などですね。通常の作成で同一記事内容の記事投稿はありませんが、csvで流し込む場合などに起こりえる可能性がありますね。

スラッグ重複を完全に避ける場合

スラッグ重複を完全に避ける場合です。できれば、運用の初めから導入されている方が望ましいです。

「wp_unique_post_slug」のフィルターフックを活用していきます。

add_filter( 'wp_unique_post_slug', function( $slug, $post_ID, $post_status, $post_type ) {
     $slug = $post_type. '-' . $post_ID;
     return $slug;
}, 10, 4  );

スラッグを強制的に「(投稿タイプ)-(投稿ID)」の形にしています。

このようにしておけば、重複が起こることはありません。

重複するのかチェックのみしたい場合

次は使用しようとしているスラッグが重複するのかチェックしたい場合に有効な手法です。

get_page_by_path( $slug, 'OBJECT', 'movie')

get_page_by_pathの返り値によって既にそのスラッグが使用されているのか判別できます。

ループの中で以下のように使用すると便利です。

if( get_page_by_path( $slug, 'OBJECT', 'movie') ) continue;

返り値が正常でオブジェクトが返ってきた場合そのループをスキップしてあげます。