teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

連番にした場合の捕捉追加

2017/06/19 05:54

投稿

rok6
rok6

スコア241

answer CHANGED
@@ -26,6 +26,34 @@
26
26
  例えば以上を functions.php に追加すると
27
27
  `entry-1` と言ったように自動で割り振ってくれるようになります。
28
28
 
29
+ ```PHP
30
+ add_filter('wp_unique_post_slug', function( $slug, $post_ID, $post_status, $post_type ) {
31
+
32
+ // 参考リンク先のようにした場合はこんな感じです
33
+ if( get_post_status() !== 'publish' ) {
34
+ // スラッグが定まっていな場合は、ID:1 のユーザーの投稿数を利用
35
+ $slug = count_user_posts(1) + 1;
36
+ }
37
+ else {
38
+ // すでに公開されている記事である場合、現在登録されているスラッグをそのまま利用
39
+ $slug = esc_attr( apply_filters('editable_slug', $slug) );
40
+ }
41
+ return $slug;
42
+ }, 10, 4);
43
+ ```
44
+
29
45
  最後に、意外と忘れがちなのが
30
46
  「パーマリンク設定の変更保存」をもう一度することです。
31
- これをしないとせっかく変更したパーマリンクも有効になりません。
47
+ これをしないとせっかく変更したパーマリンクも有効になりません。
48
+
49
+ ---
50
+ **以下、連番で管理した場合の捕捉**
51
+
52
+ スラッグは、投稿・固定ページ・メディア・カスタム投稿タイプ等、共通して同じものを付けられないため、
53
+ 連番にする際は「投稿のみ数字だけにし、他はすべて英名スラッグにする」くらいで管理しないと使えません。
54
+ 例えば、投稿で `/category/1` 固定ページで `/1` とした場合、どちらかは必ず `1-2` となるはずです。
55
+
56
+ 上記の参考リンク先の方法を加えて記載しましたコードは一応連番になりますが、
57
+ 下書きや非公開、ごみ箱に記事があるなどすると被りが発生してしまいます。
58
+ 投稿のたびに、下書きや非公開記事がない状態にしないと想定してる通りには動作しないため、
59
+ 毎回主導でスラッグを入れて管理するのとそう大差ありません。