wordpressのスラッグを自動で設定する

はじめに

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)

引用