CMSを使わずにPHPで都道府県別ショップ一覧・詳細ページを動的に作成する

2024/12/10 What's Up, サイト制作, 技術系 投稿者:

以前の記事で、WordPressのプラグイン「Advanced Custom Fields」(以下、ACF)を使用して、都道府県別のショップ一覧ページを作成する方法をご紹介しました。
「WordPressのカスタムフィールドの値で、都道府県別一覧ページを作成する方法」

そのACFプラグインですが、2024年10月にWordPress運営会社Automatticと、ACFの管理者であるWP Engineとの間に対立が発生し、プラグインの使用に懸念が生じました。
※詳細については、こちらの記事をご参照ください。
「ACFがSCFに変更された背景と影響をまとめました」

WordPressは多機能で便利な一方、セキュリティ面やプラグインのサポート終了といった懸念もあります。
「便利さ、手軽さを求めてWordPressでのサイト運用を選択したはずが、逆に苦労していないですか?」

そこで今回は、WordPressやプラグインに頼らず、PHPのみで都道府県別のショップ一覧・詳細ページを動的に表示するプログラムを作成する方法をご紹介します。

作成するファイル

作成するファイルは以下3つです。
・ショップデータ(store-db.php): ショップ情報を管理するファイル
・ショップ一覧ページ(store.php): 都道府県ごとに分類したショップのリストを表示
・ショップ詳細ページ(store-detail.php): 各ショップの詳細情報を表示

ショップデータ(store-db.php)

まず、ショップ情報を管理するためのファイルを作成します。

<?php

$stores = array(
    array('id' => 1, 'name' => '本店', 'category' => '群馬県', 'postal' => '371-0844', 'address' => '群馬県前橋市古市町553番地', 'description' => '株式会社ネディアです。'),
    array('id' => 2, 'name' => '新前橋店', 'category' => '群馬県', 'postal' => '371-0843', 'address' => '群馬県前橋市新前橋町', 'description' => ''),
    array('id' => 3, 'name' => '鳥羽町店', 'category' => '群馬県', 'postal' => '371-0845', 'address' => '群馬県前橋市鳥羽町', 'description' => ''),
    array('id' => 4, 'name' => '宇都宮店', 'category' => '栃木県', 'postal' => '329-1113', 'address' => '栃木県宇都宮市相野沢町', 'description' => ''),
    array('id' => 5, 'name' => 'さいたま店', 'category' => '埼玉県', 'postal' => '330-0841', 'address' => '埼玉県さいたま市大宮区東町', 'description' => ''),
    array('id' => 6, 'name' => '札幌店', 'category' => '北海道', 'postal' => '064-0941', 'address' => '北海道札幌市中央区旭ケ丘', 'description' => ''),
);

?>

各ショップのidは必ずユニークな値に設定します。

ショップ一覧ページ(store.php)

続いて、ショップ情報を都道府県別に分類し、リストを動的に生成するページを作成します。

<?php

// ショップデータの読み込み
require_once 'store-db.php';

// 都道府県番号対応表
$prefecture_numbers = array(
    '北海道' => 1, '青森県' => 2, '岩手県' => 3, '宮城県' => 4, '秋田県' => 5, 
    '山形県' => 6, '福島県' => 7, '茨城県' => 8, '栃木県' => 9, '群馬県' => 10, 
    '埼玉県' => 11, '千葉県' => 12, '東京都' => 13, '神奈川県' => 14, '新潟県' => 15, 
    '富山県' => 16, '石川県' => 17, '福井県' => 18, '山梨県' => 19, '長野県' => 20, 
    '岐阜県' => 21, '静岡県' => 22, '愛知県' => 23, '三重県' => 24, '滋賀県' => 25, 
    '京都府' => 26, '大阪府' => 27, '兵庫県' => 28, '奈良県' => 29, '和歌山県' => 30, 
    '鳥取県' => 31, '島根県' => 32, '岡山県' => 33, '広島県' => 34, '山口県' => 35, 
    '徳島県' => 36, '香川県' => 37, '愛媛県' => 38, '高知県' => 39, '福岡県' => 40, 
    '佐賀県' => 41, '長崎県' => 42, '熊本県' => 43, '大分県' => 44, '宮崎県' => 45, 
    '鹿児島県' => 46, '沖縄県' => 47
);

// 県別にショップを分類
$stores_by_prefecture = [];
foreach ($stores as $store) {
    $prefecture = $store['category'];
    if (!isset($stores_by_prefecture[$prefecture])) {
        $stores_by_prefecture[$prefecture] = [];
    }
    $stores_by_prefecture[$prefecture][] = $store;
}

// 都道府県番号順に並び替え
uksort($stores_by_prefecture, function ($a, $b) use ($prefecture_numbers) {
    return $prefecture_numbers[$a] <=> $prefecture_numbers[$b];
});

// 各都道府県内のショップを郵便番号順に並び替え
foreach ($stores_by_prefecture as $prefecture => &$stores) {
    usort($stores, function ($a, $b) {
        return strcmp($a['postal'], $b['postal']);
    });
}
unset($stores); // 参照を解除

?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>都道府県別ショップ一覧</title>
</head>
<body>
<main>
    <h1>都道府県別ショップ一覧</h1>
    <ul>
        <?php foreach ($stores_by_prefecture as $prefecture => $stores): ?>
            <li>
                <h2><?php echo htmlspecialchars($prefecture); ?></h2>
                <table>
                    <?php foreach ($stores as $store): ?>
                        <tr>
                            <th class="name">
                                <a href="store-detail.php?id=<?php echo $store['id']; ?>"><?php echo htmlspecialchars($store['name']); ?></a>
                            </th>
                            <td class="address">
                                〒<?php echo htmlspecialchars($store['postal']); ?> <?php echo htmlspecialchars($store['address']); ?>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </table>
            </li>
        <?php endforeach; ?>
    </ul>
</main>
</body>
</html>
    

都道府県番号順に表示し、さらに各都道府県内で郵便番号順に並び替えています。
ショップ名をクリックすると詳細ページに遷移します。

ショップ詳細ページ(store-detail.php)

各ショップの詳細情報を表示するページを作成します。


<?php
// ショップデータの読み込み
require_once 'store-db.php';

// URL パラメータからショップIDを取得
$store_id = isset($_GET['id']) ? (int)$_GET['id'] : null;

// 該当するショップを検索
$store = null;
foreach ($stores as $s) {
    if ($s['id'] === $store_id) {
        $store = $s;
        break;
    }
}

if (!$store) {
    // ショップが見つからない場合のエラーメッセージ
    echo "<h1>ショップが見つかりません</h1>";
    exit;
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title><?php echo htmlspecialchars($store['name']); ?> の詳細</title>
</head>
<body>
<main>
<h1><?php echo htmlspecialchars($store['name']); ?></h1>
<p><?php echo htmlspecialchars($store['description']); ?></p>
<dl>
    <div>
        <dt>ショップ名</dt>
        <dd><?php echo htmlspecialchars($store['name']); ?></dd>
    </div>
    <div>
        <dt>住所</dt>
        <dd>〒<?php echo htmlspecialchars($store['postal']); ?><br>
        <?php echo htmlspecialchars($store['address']); ?></dd>
    </div>
</dl>
<a href="store.php">一覧に戻る</a>

</main>
</body>
</html>

表示確認

ショップ一覧ページ

ショップ詳細ページ

これでショップ一覧・詳細ページを動的に表示するPHPプログラムが作成できました。

まとめ

今回は、PHPのみを使用してショップ一覧・詳細ページを動的に表示する方法をご紹介しました。
WordPressは便利なツールですが、セキュリティ面やプラグインのサポート終了のリスクを考えると、シンプルなPHPプログラムによる運用も有効な選択肢です。

弊社ネディアではサイト制作や保守管理サービスを行っています。
分からない、上手くいかないなどがございましたら代行いたしますのでご連絡ください。

他にもサーバ・ネットワーク保守なども行っておりますので、ネットワークのことなら全てネディアにおまかせください。

お見積もり・お申し込み・お問い合わせはこちら

カレンダー

    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
   1234
567891011
12131415161718
19202122232425
26272829   
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
1234567
891011121314
15161718192021
22232425262728
       
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
     12
3456789
10111213141516
17181920212223
24252627282930
31      
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
     12
3456789
10111213141516
17181920212223
242526272829 
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
    123
45678910
11121314151617
18192021222324
25262728   
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
   1234
567891011
12131415161718
19202122232425
262728    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
1234567
891011121314
15161718192021
22232425262728
29      
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
      1
2345678
9101112131415
16171819202122
232425262728 
       
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
U・Iターン転職しませんか?
群馬データセンター
群馬の法人ITサポートサービス Wide Net[ワイドネット]
Wide Netのクラウドバックアップ
クラウド型ファイル共有サービスRushDrive
ワイドオフィス
ネディアのSDGsへの取り組み
健康経営優良法人
IT-commons(ITコモンズ)