はじめに
wordpressで記事を作成した時に、
パーマリンクのスラッグを乱数や特定のワードに自動で設定する方法を紹介します。
なお、今回記述する方法はphp側で処理を行うので、
記事を書いている時はスラッグが変更されません。
実装
下記コードをfunctions.php内へ記述します。
function slug_save_post_callback( $post_ID, $post, $update ) { // slugの自動書き換えを行いたいpost_typeを指定する $types = array( 'post', // 投稿 'xxx' // カスタム投稿名 ); // 'publish', 'draft', 'future' の時だけ実行 if (!in_array($post->post_type, $types) || $post->post_status == 'auto-draft') return; // 新規作成以外ならslugを書き換えない if ($post->post_date_gmt != $post->post_modified_gmt) return; // slug作成 $new_slug = sanitize_title(date('Ymj')); if ($new_slug == $post->post_name) return; // すでに存在した場合は何もしない // 無限ループを避けるためにフックを外す remove_action( 'save_post', 'slug_save_post_callback', 10, 3 ); // 投稿のslugを更新する wp_update_post( array( 'ID' => $post_ID, 'post_name' => $new_slug )); // 再度フックする add_action( 'save_post', 'slug_save_post_callback', 10, 3 ); } add_action( 'save_post', 'slug_save_post_callback', 10, 3 );
変数$typesにslugの書き換えを行いたい投稿タイプを記述します。
- 投稿:post
- 固定ページ:page
- カスタム投稿:<カスタム投稿名>
変数$new_slugが、自動で設定されるスラッグです。
ここに乱数だったり、特定のワードだったりを各々設定してください。
今回は記事作成時の日時が設定されるようにしています。(e.g. 2018/01/12なら20180112)