日付ベースのパーマリンク設定(アーカイブ無効版)

今日、WordPressのパーマリンク設定を日付ベース「/%year%%monthnum%%day%」にしたのだけれど、日別アーカイブへのリンクと認識されてしまい、個別の投稿が表示されなくなってしまった。

そこで日別アーカイブを無効にするため、自作プラグインに下記を追加した。

add_action('parse_query', 'disable_daily_archive');
function disable_daily_archive($wp_query)
{
  $qv = $wp_query->query_vars;
  if ($wp_query->is_archive && !empty($qv['year']) && !empty($qv['monthnum']) && !empty($qv['day'])) {
    $wp_query->is_single = true;
    $wp_query->is_singular = true;
    $wp_query->is_archive = false;
  }
}

最初は wp-includes/query.php を直接いじっていたのだけれど、このほうがスマートかなと。

ところが問題が。場合によって同一の日付をもつ投稿が複数存在することもあるが、そもそもパーマリンクは一つのページを指すことが前提なのでWordPressは一つのパーマリンクに複数ページが存在する状況を想定した作りにはなっておらず、下書き状態のページが公開されてしまったり、色々と良くないことが起こる。

やはりスラッグをパーマリンクとして使ったほうがいいのだろうか? これは今後の課題。そのうち、自動的に日付ベースのスラッグを作るスクリプトを作るなどしてみよう。

続き:日付ベースのパーマリンク設定(スラッグ版)