
下記のコードでアーカイブを実装したいのですが、エラーが表示されており、調べても構文の間違えが分かりませんでした。構文でおかしな部分はありますでしょうか?
//エラー箇所
if ($the_year === $this_year): // 今年だったら
$out .= '<li class="year acv_open current">' . $the_year;
$out .= '<ul class="month-archive-list">';
else: // それ以外の年の場合
$out .= '<li class="year">' . $the_year;
$out .= '<ul class="month-archive-list">';
endif;
//エラー文
syntax error, unexpected '$out' (T_VARIABLE)
<div class="widget">
<h4 class="monthly-archive-title">月別アーカイブ</h4>
<?php
// 月別アーカイブリストを取得する
$monthly_archives = wp_get_archives(
$args = array(
'type' => 'monthly',
'show_post_count' => true,
'before' => '',
'after' => ',',
'echo' => 0,
));
$monthly_archives = explode(',', $monthly_archives); //配列化
array_pop($monthly_archives); //末尾の空白要素を削除
// 年別アーカイブリストを取得する
$yearly_archives = wp_get_archives(
$args = array(
'type' => 'yearly',
'format' => 'custom',
'before' => '',
'after' => ',',
'echo' => 0,
));
$yearly_archives = explode(',', $yearly_archives); //配列化
array_pop($yearly_archives); //末尾の空白要素を削除
$this_year = (string)idate('Y'); //現在の年を、4桁の文字列で取得
// HTMLとして出力するコードの記述部分
// ここから
$out = '<ul class="archive-list">';
foreach ($yearly_archives as $year) {
$the_year = substr($year,-8,4); // 「年」を表す部分のみ抽出する
if ($the_year === $this_year): // 今年だったら
$out .= '<li class="year acv_open current">' . $the_year;
$out .= '<ul class="month-archive-list">';
else: // それ以外の年の場合
$out .= '<li class="year">' . $the_year;
$out .= '<ul class="month-archive-list">';
endif;
foreach ($monthly_archives as $month) {
//月毎アーカイブの文字列中に、ターゲットとなる年が含まれているか
$pos = strpos($month, $the_year);
// 含まれている限り、li要素を出力
if ($pos !== false): // 該当する文字列が含まれているときは、その位置が返ってくるので、!==falseという判定文を使用
$out .= $month;
endif;
}
$out .= '</ul>'; // 閉じる <ul class="month-archive-list">
}
$out .= '</li>'; // 閉じる <li class="year">
$out .= '</ul>'; // 閉じる <ul class="archive-list">
// ここまで
// HTMLの出力
echo $out;
?>
</div>
No.4ベストアンサー
- 回答日時:
コロンを使った構文はこれで正しいと思います。
> syntax error, unexpected '$out' (T_VARIABLE)
$outという変数が、本来あるべきではない箇所に書いてある、というエラーです。
こういう場合
・$outがあるのが間違い
・$outの周辺に間違いが原因で、 $out が間違いかのようにエラーになっている
の2つが考えられます。
質問のスクリプトをコピペしたところ、
if ($the_year === $this_year): // 今年だったら
の
: //
ここが「全角スペース」になっています。
元のファイルもそうなってませんか?
コードを書くときは、(色が変わる、□で書かれるなどの)空白が見えるようなエディタを使うことをお勧めします。
No.5
- 回答日時:
マニュアルに
「同じブロック内で別の構文を混ぜて使うことはできません。」
と書かれているから、それに該当するのでは?
https://www.php.net/manual/ja/control-structures …

No.3
- 回答日時:
if then elseの構文は以下
if (xxxxxxxx) { // もし〇〇なら
真の場合の処理を記述
} else { // もし〇〇でなければ
偽の場合の処理を記述
}
No.1
- 回答日時:
if ($the_year === $this_year){ // 今年だったら
$out .= '<li class="year acv_open current">' . $the_year;
$out .= '<ul class="month-archive-list">';
}else{ // それ以外の年の場合
$out .= '<li class="year">' . $the_year;
$out .= '<ul class="month-archive-list">';
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
アンドロイドスマホでのphp ech...
-
Postgresの特定のカラムからス...
-
ここで言う空文字の意味とは?
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
超難問 Scripting.Dictionary ...
-
Dictionary(連想配列?)の使い方
-
foreachとかの勝手な省略?
-
PHPの構文で間違えが分からない
-
PHPでこのコード自体に意味は無...
-
VB.NET で 二次元のハッシュは...
-
ftokが動かない?
-
Excel VBAでフィルター後の対象...
-
PHPで連想配列のプルダウンメニ...
-
PHP:ツリー構造をulとli要素に...
-
PHP、{}記号の意味
-
smartyでtplファイルでの2次元配列
-
配列の値によって条件分岐がし...
-
POSTで渡されるデータの数がわ...
-
pdfファイルの複数添付 引数の型
-
ulのネストをタブ区切りに変換...
-
リストボックス複数選択抽出方法
-
多次元配列の中で条件に合う要...
おすすめ情報