web-dev-qa-db-ja.com

Wp_insert_postのスラグの重複を防ぐ方法

投稿を作成したときにページを作成する機能があります(親子関係ツリーを構築するため)。

私はページを作成するために投稿の$タイトルを使用しています、そしてこれも複製スラッグを作成します。それを独特にするためにスラグをわずかに変える方法はありますか?新しいスラグが元の投稿に干渉しないようにするにはどうすればよいですか。

3
AlxVallejo

あなたがwp_insert_postを使うならば、それはあなたのためにユニークなポストスラグを計算するべきです。 wp_insert_postを使わないのなら、 wp_unique_post_slug を使ってみてください。どちらもうまくいかない場合は、挿入する前に単純に-pageまたは新しいページのpost_name(slug)に追加してみてください。

WordPressはポストスラッグの独自性をアプリケーションレベルでチェックします - wp_posts.post_nameに独自のインデックスがあるようには見えません。したがって、たとえば、2つの投稿を同時に作成しているトランザクション内にいる場合、一意性チェックは失敗します。 2つの投稿が同時に挿入され、両方のスラッグの一意性チェックが失敗するような、ある種の競合状態を引き起こす可能性もあります。

1
chrisguitarguy

私の経験からすると、要求は通常反対です - WPが頑固にそれらを生成することを拒否するとき同じスラッグを達成すること。 :)

スラグが階層型と非階層型の投稿タイプの間で重複することはごくわずかですが、それらの中で別々には表示されません。あなたの場合はpost(非階層)とpage(階層)が関係しているので、WPはスラッグの再利用を喜んで許可します。

手動でWPに強制的にページのスラッグを複製させたくない場合は、おそらく重複チェックを失敗させて数値接尾辞ロジックを起動させることをお勧めします。次のフィルタを介して実行できるwp_unique_post_slug()ソースを見てください。

apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent )
0
Rarst

スラッグが繰り返されると、WPが自動的に末尾に数字を追加すると思います。

0