WordPress

【WordPress】日付のリンク先がページが見つからないエラー(404)となる場合の対処法

今日はWordPressの記事です。

今回は、テーマが勝手に配置してくれる日付を選択すると、ページが見つからないエラー(404)となる場合の対処法

page-not-found404

404とはHTTPのエラーの1つで、リンク先が見つからない場合に返すエラーコードです。
原因は下記の2つが大半です。

  1. リンク先のURLが誤っている
  2. リンク先のファイル/フォルダが、削除またはアクセス不可となっている

エラーの原因

では原因は何なのか。探っていきます。

僕のテーマでは、トップページおよびブログの日付をクリックすると、該当年月のアーカイブページに飛ぶはずで、作成した記事は年月単位に管理されています。
よって2つ目の「リンク先のファイル/フォルダが、削除またはアクセス不可となっている」という原因は、今回はあてはまりません。
1つ目の「リンク先のURLが誤っている」にあたりをつけます。

さっそくエラーとなるリンクにフォーカスを置いてみると、

リンク先がおかしい

まだ生まれてもいない年月になっているではありませんか。
ttps://mitosuya.net/ 1970/01

勘のいい方ならお気づきでしょう。
WordPressはPHPで作られており、PHPの日付型の最小値が1970/01/01なのです。

つまりどういうことか。
おそらく内部的には、記事の作成日(2018年9月28日)から、年月(2018/09など)に変換するする処理があるはずで、それに失敗していて、日付の最小値が入っている。と考えられます。

開発者ツールでHTMLのソースを見てみましょう。
やはり1970/01というリンクになっています。

HTMLソース

前後の情報(<div class=”entry-content”>)などから実際のソースの場所を割り出せるので、
FTPで接続して、ソースの本体を探します。

いました。

オリジナルのソース

僕のテーマの場合は下記の場所に配置されていました。

(ドメイントップ)\wp-content\themes\fire-blog\template-parts\homepage-list.php

やはり、日付の変換をしていました。

<a href="<?php echo esc_url( home_url() ); ?>/<?php echo date( 'Y/m' , strtotime( get_the_date() ) ); ?>">

おそらく「get_the_date()」が記事の日付を取得する関数で、「’Y/m’」の形式に変換しようとしているのでしょう。ではget_the_date()の不具合か?

そうではありません。
get_the_date()はその下の行でも使われており、
39行目のget_the_date()は、href属性なのでリンクの実際の飛び先、
40行目のget_the_date()は、表示上の値です。

表示上の値は正しく「2018年9月28日」と表示されています。

表示値は正しい

消去法でここで回答がでます。
「2018年9月28日」という文字列を、date関数で変換することができないのです。
日本特有の表記ですからね。

〇〇〇〇年□□月△△日の表記にこだわりはないので、
PHPが認識できる表記に変更します。

WordPressのダッシュボード ⇒ 設定 ⇒ 一般
下のほうに「日付のフォーマット」があると思います。

ダッシュボード-設定-一般

「Y年n月j日」を「Y-m-d」に変更して[変更を保存]をクリックします。

確認してみましょう。
まず日付のフォーマットがかわりました。
そしてリンク先が
ttps://mitosuya.net/ 2018/09
にかわりました。

正しいリンク先

もちろん飛び先もOKです。

ちゃんと飛べた

海外のテーマを使用すると、こういうことが起きやすいので頭に入れておきましょう。
現場からは以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です