谷田部(水洗トイレ)高度成長期に多く見られたWCの表記。

飲食ビル※1 の敷地の脇の公衆トイレ。

白地に大きくな文字でWC(water closet=水洗トイレ)と書かれています。

水洗トイレ(WC)は、昭和30(1955)年に発足した日本住宅公団が広く普及させたものの一つです。*1
昭和30~40年代は、公衆トイレにWCと表記されているのをよく見かけた記憶がありますが、最近は、「Toilet」、「Restroom」やさまざまなピクトグラム(絵文字)で表記されることが一般的なようです。

隣はブロック塀で仕切られています。

参考文献

*1 谷直樹 便所のはなし 鹿島出版会 1986.12

P.99
昭和30(1955)年に発足した日本住宅公団(現在の住宅都市整備公団)は…

参考記事

※1 谷田部(飲食ビル)派手な装飾の飲食店。2022-06-24

谷田部(飲食ビル)派手な装飾の飲食店。

今回は、谷田部(茨城県つくば市)の町並みを散歩します。
谷田部の旧道沿いの郵便局近くの曲がり角に、飲食ビルがあります。

派手な装飾の飲食店。

居酒屋、クラブ、マッサージ店などが連なります。

飲食ビル口の看板。

人形町(日本橋大伝馬町の路地)江戸の下水道が現代に引き継がれています。

日本橋富沢町の浜町川の水路跡※1 はさらに、北側へ続いています。
しかし、さきほどの商店街のような風景は全く無く、ビル裏側の殺風景な通路です。

水路跡の中央がやや窪んだ通路が延々と続きます。

通路は、「都有地」となっており、東京都下水道局が管理しています。
浜町川跡の地下に、公共下水道の「馬喰町幹線」がつくられているのは、「江戸の下水道が現代に引き継がれている。」といえます。※1

かつての浜町川は、千代田区岩本町まで続き、神田川に合流していました。

参考文献

*1 栗田彰 江戸の川あるき 青蛙房 1999.7
浜町川

P.29
浜町川跡の地下に、公共下水道の「馬喰町幹線」がつくられているのは、…

参考記事

※1 人形町(問屋橋跡北側の路地)日本橋富沢町。浜町川跡の商店街。2022-06-21

人形町(問屋橋跡北側の路地)日本橋富沢町。浜町川跡の商店街。

江戸時代、水路として活用されていた浜町川は、戦後、埋め立てられ、跡地のほとんどは、オフィスビルが連なるビルの裏側の路地となっていますが、日本橋富沢町の部分だけは、商店街の雰囲気が残っています。

「梅の家」の屋号が残るお宅。

昭和の雰囲気が残る通りです。

北側から見たところ。飲食店も営業中です。

人形町(真砂座の碑)明治39年、夏目漱石「猫」上演。

 

今回は、人形町(東京都中央区)の町並みを散歩します。

「日本橋中洲(にほんばしなかす)」という地名で呼ばれているこの付近は、もともとは、文字通り、隅田川の中州でした。
1695年(万治2年)、吉原の遊女高尾太夫がこの付近の船上で吊り斬りにされ、遺体が北新堀河岸(日本橋箱崎町)に漂着し、高尾稲荷に祀られたという逸話があります。※1

中洲は、江戸時代から明治にかけて、歓楽街として賑わいました。

マンション脇に鎮座する真砂座跡の碑。

漱石「猫」上演。真砂座跡、と刻まれています。

夏目漱石の「猫」は、小山内薫によって脚色された演劇で、明治39年に真砂座で上演されました。

碑文:
夏目漱石の「我輩ハ猫デアル」は、小山内薫によって脚色された。伊井蓉峰らが出演し、日本橋中洲の眞砂座跡で明治三十九(一九〇六)年十一月三日から三十日にかけて上演された。
平成十五年十月吉日
早稲田大学 第十四代総長 奥島孝康 識

日本橋(てんぷら天松)昭和11年創業。

日本橋室町1丁目。

ランチ営業中の老舗てんぷら店。

「てんぷら天松」は、1936年(昭和11年)に渋谷にて創業しました。

てんどんとビールを注文。

日本橋(清水理美容院)理容室と美容院。

日本橋室町の通り。

ビルの谷間に佇む理容室。昭和の情緒が残っています。

1階が理容。2階が美容です。

懐かしい感じのする店構えです。

日本橋(十軒店跡の碑)江戸時代の仮設専門店街。人形市。

日本橋の美術店のある交差点。

ここに、美術店などの有志が建てた「十軒店(じっけんだな)跡」の碑があります。
「十軒店」は、江戸時代の仮設専門店街(人形市)のことで、当初、同業者が十軒あったことから、こう呼ばれるようになりました。*1

隣の「コレド室町テラス」には、中央区教育委員会が建てた別の案内板。

三月の上巳(桃)の節句には、内裏雛・禿人形・飾道具等を、五月の端午の節句には、冑人形、鯉のぼり等を商う人形市が立ち、十二月の歳暮の破魔矢・羽子板等を商う市とあわせて、大変なにぎわいを見せていました。

「十軒店」の人形市が、葛飾北斎の「画本東都遊」に描かれていることが紹介されています。

日本橋(浮世小路)浮世ショウジ。落語「百川」の舞台。

今回は、日本橋(東京都中央区)の町並みを散歩します。
日本橋のCOREDO室町北側に、「浮世小路(うきよしょうじ)」と名づけられた通りがあります(写真下)。近くには、「浮世小路千疋屋ビル」というのもあり、江戸切絵図にも記載のある「浮世小路」の名称は、最近、人気のようです。

現在の浮世小路。写真左奥に見える鳥居は、日本橋福徳神社(芽吹稲荷)。

福徳神社の敷地に、「浮世小路と料亭百川(ももかわ)」の案内板があります。

案内板より:
福徳神社南側の通りは江戸時代「浮世小路」と呼ばれていました。浮世小路の東端北側には 落語噺の舞台としても知られる料亭百川があったとされています。百川は江戸屈指の料理茶屋として繁盛し、幕末にペリー艦隊が来航した時には、乗組員全員にすべて自前で本膳を提供したほどの力がある料亭でした。

参考文献

*1 北村一夫 江戸東京地名辞典 講談社 2008
浮世小路

P.98
大田南畝(おおたなんぼ)の「一話一言」 によれば 江戸に小路(こうじ…

柏(掩体壕跡)こんぶくろ池。

掩体壕には、有蓋(ゆうがい)のタイプと無蓋(むがい)のタイプがありますが、柏飛行場にあったのは、無蓋のタイプです。
こんぶくろ池のところに、1基残っています。

掩体壕の案内板。無蓋タイプは、周囲が土手で囲まれているイメージです。

観察路にしたがって進みます。

掩体壕跡。周囲が土手で囲まれていることが解ります。

柏(ジャンボ蛇口)設備会社の敷地に建つモニュメント。

柏の県道47号線沿いにある「ジャンボ蛇口」。まるで空を飛んでいるようです。

蛇口から水が出ていますが、後ろ側には何もありません。

蛇口は、近くにある水道などの設備会社の敷地に建つモニュメントです。蛇口から出る水の部分が支柱となっています。

支柱の根元部分は、きれいな花壇になっています。

柏(柏飛行場跡)旧陸軍東部第105部隊の営門。

現在の柏の葉公園一帯は、戦争中、旧日本陸軍の柏飛行場があった場所でした。
現在も旧陸軍東部第105部隊の営門が当時のまま残されています。*1

案内板には、飛行場の滑走路と誘導路の見取り図が示されています。*1

運動公園のあるあたりに、「飛行場跡地」の案内板があります。

つくばエクスプレス開通に伴う区画整理の中で、掩体壕や秋水の燃料庫などの新たな発見があったことが記されています。

参考文献

*1 柏市教育委員会 旧陸軍東部第105部隊の営門 2012.3.31

この門柱は、昭和13年(1938)11月に開設された柏飛行場の兵営施設の営門(旧陸…

柏(ミートショップ)豊四季台団地。オリエンタルカレー。

豊四季台団地は、かつての柏競馬場跡地にできた団地です。

団地の中にある商店街のお肉屋さん。

揚げたてのコロッケが頂けます。

懐かしいオリエンタルカレー。通常は名古屋でしか買えません(一部の通販やカルディで購入できるそうですが)この店で買うことができます。

昭和45(1970)年頃、南利明※1 が名古屋弁のアクセントで、「ハヤシもあるでよう」とオリエンタル・スナックカレーのCFに登場するや、たちまち流行語になりました。*1

参考文献

*1 世相風俗観察会 現代世相風俗史年表1945→2008 河出書房新社 2009
1970年 フィーリング時代のCM

南利明が名古屋弁のアクセントで、「ハヤシもあるでよう」とオリエンタル・スナ…

参考記事

※1 本庄(立小便看板)手作り感のある看板2013-12-24

柏(柏競馬場跡地)現在の豊四季台団地。

柏の豊四季台団地。

かつて、ここには、地方競馬としては最大・最新の「柏競馬場」がありました。*1

競馬場は1段高い場所にあったため、その段差にかつての名残を見ることができます。写真は、団地の北東部分。

南西部分。こちらにもはっきりとした段差が認められます。

参考文献

*1 福島茂太 幻の「柏競馬場前駅」はどこに 流山市立博物館友の会 東葛流山研究12号

P.139
千葉県畜産組合連合会が大正末期、千葉市外の椿森で草競馬を行ってい…

柏(柏銀座通り)柏市の中心地。老舗や飲み屋が多いところ。

JR柏駅東口の柏銀座通り。
柏神社前は柏市の中心地で、このあたりは、老舗や飲み屋が多いところです。*1

1F,2Fに飲食店が入るビル。

「柏銀座商店会」の看板。

賑やかな通りは、奥まで続いています。

参考文献

*1 山本鉱太郎 房総の街道繁盛記 崙書房出版 1999.8
新興都市柏の歴史

P.324
柏神社前は柏市の中心地で、このあたりに老舗や飲み屋が多い。今でこ…

木更津(六軒町)俗称六軒町と呼ばれた歓楽街跡地。

木更津市街の東のはずれ。国道16号線と国道409号線が交差するあたり。

この付近は貝塚の遺跡で、貝塚の発掘報告書に、「発掘場所(永井作豆造279番地)は、俗称「六軒町」と呼ばれる遊廓の屋敷跡」と記されています。*1*2

昭和34年頃までは、発掘場所の西側に、旅館や料理店が散在しており*3、歓楽街の名残があったようです。

南側の通り。

参考文献

*1 対馬郁夫 木更津市永井作新田貝塚発掘略報 1957

本遺跡は木更津駅の北東方1500mの地点に位置し、現在の行政区分に依れば木更津…

*2 千葉市立加曽利貝塚博物館 貝塚博物館紀要 第19号 リンク
*3 日本都市協会 木更津市動態図鑑 昭和34年度版 1959.7

木更津(富士見亭)焼きそばの名店。

木更津の名店「富士見亭」。焼きそば専門店です。

矢那川の河口近くの交差点に1軒だけ建っています。

メニューは、「焼きそば」「焼きそば大盛」「缶ビール」の3品目のみ。

「焼きそば大盛」と「缶ビール」を注文。

木更津(富士見町の飲食店ビル)日焼けした広告看板。

木更津駅前から西へ延びる通り(富士見通り)に面して、飲食店のビルが建ち並んでいます。

クラブやバーが入るビル。

反対側から見たところ。

古びた広告看板。「こぶたの館」と書かれています。年数が経過しているためか、看板が著しく日焼けしています。

木更津(お好み通り)越路ビル。ビルの裏側へ抜けられます。

「お好み通り」は、ビルの裏側へ抜けられます。

富士見通りから、交差点を南へ入ったところにある越路ビル。

ビルの1階左寄りは、横丁になっていて「お好み通り」と名付けられています。

「お好み通り」は、ビルの裏側へ抜けられます。

木更津(掩体壕)旧日本海軍木更津海軍航飛行場。

江川海岸へ向かうの道路の南側(写真の左側)は、陸上自衛隊木更津駐屯地(旧日本海軍木更津海軍航飛行場)です。

フェンス越しに掩体壕(えんたいごう。戦時中の戦闘機用の壕)が見えます。

「木更津市郷土博物館 金のすず」の展示物によると、飛行場の北西部に単発機(発動機が1基)用の掩体壕が、飛行場の北側に中型機用の掩体壕が、それぞれ数基づつありました。

掩体壕を出て、この道路を移動し、滑走路から飛び立っていく姿が想像できそうです。

附近には、他にも遺構らしきものが見えます。

木更津(江川船堀)船堀改修記念の碑。

今回は、木更津の町並みを散歩します。
「日本のウユニ塩湖」と呼ばれ、人気のスポットとなっている江川海岸ですが、海岸の入口脇にある船堀は、昭和の雰囲気を醸し出している場所です。

船堀の中に出島のように突き出した場所にある綿津見神社。

高度成長期、東京湾岸の漁業協同組合は、莫大な補償金と引き換えに、次々と漁業権を放棄してきましたが、江川漁業協同組合は、東京湾岸で唯一残る自然干潟の潮干狩りをはじめ、現在も漁業が存続しています。

綿津見神社の敷地に、「江川船堀改修記念」の碑が建っています。

碑文:
遠き昔より海の幸を生業としきた私達は昭和十一年、旧海軍飛行場の建設に伴いこの地に移り、漁業の基地とした。以来四十有余年変遷著しい歴史の歩みの中に整備改修は、ままならず今日に至った。この船堀りの充実が多年に亘る組合員総ての願望であった。防衛施設庁、千葉県、木更津市の援助により、八千五百余万円の巨費を投入し、完成した。
昭和三十六年 江川漁業協同組合

綿津見神社から見た江川海岸方向。水門の向こうが潮干狩り場です。

谷田部(ホテルニュー梅屋)昭和55年にオープンしてから36年。

街道沿いにあった梅屋旅館※1 からすぐの場所にホテルニュー梅屋が営業中です。

明治に梅屋旅館※1 として創業し、ホテルニュー梅屋を昭和55年にオープンしてから36年、今もつくば市谷田部で続く老舗のホテルです。*1

HOTELUMEYAの屋上看板。

東側の運動場からの眺め。1階は、レストラン「ミルキーウエイ」。

参考文献

*1 ホテルニュー梅屋 公式ページ リンク

常磐道谷田部IC・圏央道つくば中央ICより車で5分の場所に 位置するホテルニュー…

参考記事

※1 谷田部(梅屋旅館跡地)現在の梅屋ホテルの前身。2022-05-29

谷田部(梅屋旅館跡地)現在の梅屋ホテルの前身。

谷田川の橋から少し行ったところには、梅屋旅館(現在の梅屋ホテルの前身)がありました。旅館、料亭で芸者も置いていて繁盛していました。*1

梅屋旅館の建物は、しばらくの間、旧街道沿いに残っていました。ガラス戸に「梅屋」の文字が描かれていました。*1

現在も残る「梅屋旅館」の看板。

谷田川方面(西側)の遠望。

参考文献

*1 つくば書店レポート部 つくばレポート vol.1

橋から少し行ったところが旧梅屋で、現在の梅屋ホテルの前身があった。旅館、料…

この記事を参照している記事

谷田部(ホテルニュー梅屋)昭和55年にオープンしてから36年。

谷田部(玉川堂)老舗和洋菓子店。かつては映画館をを経営。

四つ角のバス停のところにある老舗和洋菓子店の玉川堂。

玉川堂は、かつては、「玉川館」という映画館を経営していました。*1
「玉川館」は、現在の和菓子屋玉川堂の裏手にあり、谷田部の海軍の飛行場の航空隊の人たちが沢山来ていたそうです。*2

大福、柏餅など購入。餡子は非常にあっさりとしていて、いくつでも食べれます。

この付近は、旧町名で「内町」と呼ばれていました。
昭和 4 年~6 年の繁盛記によると、内町には、二業の料理旅館が存在していました。*3

参考文献

*1 小口千明 茨城県つくば市谷田部市街にみる往年のにぎわい 筑波大学人文社会ビジネス科学学術院人文社会科学研究群人文学学位プログラム歴史・人類学プログラム歴史地理学研究室 歴史地理学野外研究 (16):2014.3 p.63-97 2014.3 リンク

P.74
その裏側には「大正十三年七月二十二日建立という建立年月日と,建立に…

*2 つくば書店レポート部 つくばレポート vol.1

橋から少し行ったところが旧梅屋で、現在の梅屋ホテルの前身があった。旅館、料…

*3 小口千明 近現代茨城県旧筑波郡および谷田部市街の活況とその後 筑波大学人文社会ビジネス科学学術院人文社会科学研究群人文学学位プログラム歴史・人類学プログラム歴史地理学研究室 歴史地理学野外研究 (17):2016.3 p.59-94 リンク

「谷田部商人繁昌記」(以下,原文)

谷田部(獣霊碑)大正13年建立。多数の寄付者名。

谷田部四つ角の交差点近くに、獣霊碑(牛馬の供養塔)が建っています。*1

碑の裏面には、寄付者として、谷田部町料理店として 11名,谷田部町芸妓営業として1名の名前があり、当時の賑わいが想定されます。*1

「大正13年建立」と刻まれています。

周囲は綺麗に整備されています。

参考文献

*1 小口千明 茨城県つくば市谷田部市街にみる往年のにぎわい 筑波大学人文社会ビジネス科学学術院人文社会科学研究群人文学学位プログラム歴史・人類学プログラム歴史地理学研究室 歴史地理学野外研究 (16):2014.3 p.63-97 2014.3 リンク

P.74
その裏側には「大正十三年七月二十二日建立という建立年月日と,建立に…

谷田部(理容室)四つ角の近く。120年前に開業。

今回は、谷田部(茨城県つくば市)の町並みを散歩します。
つくばエクスプレス線みどりの駅からバスで約5分で谷田部四つ角の交差点へ到着です。

交差点の近く。

中華料理店のような店名のですが、理容室です。

地元の方の話によると、創業120年だそうです。

野田(蕎麦店)野田銀座の老舗。

野田銀座※1 の通り沿いのそば店「住吉」。

昭和の商工名鑑*1 や商工地図*2 にも載っている老舗です。

店内。

かつ丼の定食とビールを注文。

参考文献

*1 野田商工会議所 野田商工名鑑 昭和38年度版 1963.8

P.199
芸妓置屋 中…

*2 東京交通社 野田市流山町 日本商工業別明細地図之内 No.1195 1956

参考記事

※1 野田(野田銀座)芸妓置屋があった通り。国際クラブ。2022-05-23

野田(野田銀座)芸妓置屋があった通り。国際クラブ。

かつて野田銀座*1 と呼ばれていた通り。

昭和38年の「野田商工名鑑」によると、この付近には芸妓置屋がありました。*2

国際パブ。

明治~大正の頃は、近くに醸造工場(粕谷第五醸造場)があり、この通りには人車鉄道が通っていました。*3

参考文献

*1 東京交通社 野田市流山町 日本商工業別明細地図之内 No.1195 1956
*2 野田商工会議所 野田商工名鑑 昭和38年度版 1963.8

P.199
芸妓置屋 中…

*3 報文社 野田町全図(部分) 1915

千葉県野田町全図(大正四年)をもとに作図。

この記事を参照している記事

野田(蕎麦店)野田銀座の老舗。

野田(ビジネス旅館)交差点の角に面した入口。

香取神社の北側の十字路。

旅館の入口は交差点の角に面しています。

「馬酔木」。スナック店などでよく見かける屋号です。

北側の道はゆるやかに弧を描いています。

野田(香取神社の富士塚)境内の奥。粟嶋大神。

野田市上花輪の香取神社。かつては、この付近に多くの醸造所が密集していました。

境内の奥にある富士塚。3mぐらいはありそうな大きなものです。

麓に安置されている粟嶋大神。

頂上からは、反対側の道路の交差点が望めます。

野田(明治牛乳の牛乳箱)商店だったと思われるお宅。

醤油発祥の地の碑のあるあたりから東側へ延びる通り。

商店だったと思われるお宅。

木造家屋に木製の牛乳箱はよく似合います。

横開きタイプです。

野田(野田醤油発祥の地の碑)室町時代に飯田家の工場跡地

今回は、野田(千葉県野田市)の町並みを散歩します。
野田市街の中心部。野田郵便局の流山街道を挟んだ反対側の路地を少し入ったところに、野田醤油発祥の地の碑があります。

この地は、室町時代に飯田家が初めて野田で醤油を醸造した場所です(碑の案内文より)。

野田市の文化財に指定されています。

鳥居に、茂木房五郎(野田醤油(現キッコーマン)社長)の名が刻まれています。

木更津(吾妻神社の富士塚)社殿の左側。富士浅間大神。

吾妻神社社殿の左側(道路側)。

富士塚があります。

高さ2m近くありそうな富士塚です。

富士浅間大神。
日本神話に登場する木花咲耶姫(このはなさくやひめ)、邇邇芸命(ににぎのみこと)、磐長姫命(いわながたらしめのみこと)が祀られています。

木更津(吾妻神社)きみさらず伝説。石塔に楼名。

陸上自衛隊駐屯地の近く、木更津市吾妻2丁目にある吾妻神社。
吾妻神社の祭神は、弟橘媛(おとたちばなひめ)。弟橘媛は、日本書紀に登場する伝説上の英雄「日本武尊(やまとたけるのみこと)」の妃です(吾妻神社 案内板より)。

入口に建つ石柱の側面には、「君去らず 袖しが浦に立つ波の その面影を 見るぞ悲しき」の歌が刻まれています。

社伝には、日本武尊が東征の際。相模から上総へ海を渡ろうとした時、荒れた海に身を投じた弟橘媛の袖がこの近くの海岸に漂着したので、これを納めて吾妻神社を建てたとあります(吾妻神社 案内板より)。

「君不去」=きみさらず=木更津と呼ぶようになったといわれています(きみさらず伝説)。*1

この「きみさらず伝説」にあやかったのでしょうか、吾妻神社には、遊廓寄進の石塔があります。
右側の石塔には、「第一京都樓」と刻まれています(写真右下)。

左側には「第二京都樓」。

木更津遊廓の遊女たちは、開店前のひととき、吾妻へ参詣したそうです。*2

参考文献

*1 木更津市観光協会 木更津市観光情報 リンク
木更津市の歴史 リンク

木更津の地名の起こりは、日本最古の歴史書「古事記」(7世紀頃)に登場する武…

*2 高崎繁雄 木更津地名散歩 新千葉新聞社 新千葉新聞 連載
⑥ さかんだな 1976.3.5

仲片町公会堂のあたりは昭和10年代は海だったところで、通称八幡屋のカシとい…

木更津(紅雲堂書店)木更津町鳥瞰図を販売中。

本町四つ角から少し入ったところにある紅雲堂書店。昔の佇まいのままの建物です。

軒下の屋号。

2010年頃から、まち歩きを目的とした鳥瞰図パネルが設置されるようになったためでしょうか。こちらの書店では、木更津町鳥瞰図の販売も行われています。

紅雲堂の位置が記されています。

木更津(旧金田屋洋品店)。昭和7年に建てられた看板建築。本町通り。

本町四つ角(中央2丁目)の角に残る看板建築。
「本町通り」には呉服屋などのお店や銀行などが軒を連ね、木更津の商業の中心地として栄えていました。*1

現在の建物は昭和7年に建てられた看板建築です。*1

モダンな外観は今も本町四つ角の目印として異彩を放っています。*1

現在は、時計修理・ラジオメーター・アンティークの専門店「金田屋リヒトミューレ」となっています。(前回(2007年)、訪れたときは、「レディースサークル ひまわり」でした。)

参考文献

*1 みなと木更津再生構想推進協議会 ぶらり木更津まち歩き
本町通りの旧金田屋洋品店 街なみの情景(現地案内板) 2010.3

昭和4年の絵図で金田屋洋品店のところが本町四つ角と呼ばれ、ここから南に「九…

木更津(森田屋)江戸時代からの老舗生そば店。3階建ての防火帯建築。

木更津市中央1丁目の田面通り(たもどおり)。
かつては田んぼであった通りにたくさんの商店が並ぶようになったことから、「田面通り」と呼ばれるようになりました。*1
交差点の角に3階建ての防火帯建築が建っています。

1階には、「森田屋本店」。
江戸時代からの老舗生そば店です。*1
入口前には、かすれて、ほとんど読み取れない看板が立っています。

生そばの他に、洋食、中華、も。

天ぷらそばとビールを注文。

参考文献

*1 みなと木更津再生構想推進協議会 ぶらり木更津まち歩き
田面通りの久留里商店 街なみの情景(現地案内板) 2010.3

 木更津の街中から久留里へ通ずる街道は近郷からの人々で賑わい、かつては…

木更津(こうもり安の墓)花柳界の寵児と言われるほどの人物。

今回は、木更津の町並みを散歩します。
木更津市中央1丁目にある選擇寺。

境内の奥まったところに、こうもり安の墓があります。

「こうもり安」は、木更津の油屋「紀の国屋」の次男として生まれ、男ぶりがよく、天性の美声に加え金回りもよく、花柳界の寵児と言われるほどの人物でした(案内板より)。

「こうもり安」は、歌舞伎「与話情浮名横櫛(よわなさけうきなのよこぐし)」の主人公の与三郎※1 の相棒(脇役)としておなじみでした(案内板より)。

昭和6年に、チャップリンの「街の灯」の主人公を「与話情浮名横櫛」のこうもり安に当てはめた「蝙蝠の安さん」が初演されました。

柏(踏切近くの飲食街)居酒屋、スナックが入る長屋風の狭小建物。

気象大学校近くの狭小建物。

長屋風の共同建物です。写真右奥は、東武野田線の踏切。

居酒屋、スナックなどが連なっています。

建物の裏側。わずかに曲線を描いています。

柏(松ケ丘一号型街路灯)登録有形文化財。

JR南柏駅から徒歩10分。松が丘団地へ向かう途中の寺院の敷地に重要文化財となっている街路灯(レトロ電柱)が保存されています。

電柱は柵で囲まれ、隣には、教育委員会の説明板があります。

プレートの文字も読め、保存状態は極めて良好です。

蓋を開けた中には、スイッチが納められています。

柏(商店街の質店)脇道を入ったところに看板。

商店街の脇道を入ったところにあるカラオケスナック。

その奥に、質店の暖簾が見えます。

質店の看板。

質店脇の路地。

柏(柏一小通り商店街)柏第一小学校近くの商店街。

柏駅西口から北側へ柏市立柏第一小学校向かう方向に、柏一小通り商店街が連なっています。

商店や居酒屋などが建ち並びます。

スナック「トミー」。「コーヒー」とも書かれていますが、飲食業柏連合会のホームページでは、業種は居酒屋となっています。

柏第一小学校側から。

柏(駅西口のもつやき店)憩いの場となっている桜の木。

今回は、柏(千葉県柏市)の町並みを散歩します。
柏駅西口のデッキを北側へ進み。階段を降りようとすると眼下に大きな桜の木が目に入ります。

その桜の木の下に、もつやきのお店。

外にも座席があります。

大きな桜の木の下は喫煙所になっていて、憩いの場になっています。

関宿(水塚跡)かつての「水塚」を再現。

千葉県最北の関宿町の南。野田市中戸に、古民家カフェの「水塚」が高台に建っています。
店名の「水塚」は、かつての関宿で多く見られた、洪水の際に避難するための土盛りの上に設けられた建物の「水塚」*1 に由来するものと思われます。

反対側から見ると、土が盛られていることがよく解ります。

この日は、残念ながら休みの日でした。

江戸川の土手からの遠望。

関宿(風呂屋)今では少なくなったヒノキ風呂製造・販売。

関宿町の鈴木貫太郎記念館の近くに、今ではほとんど見かけなくなったヒノキ風呂製造・販売店があります。

「風呂」の文字。

風呂や桶などが販売されています。

工場が併設されています。

関宿(博物館の展示)江戸川、利根川の歴史と産業・暮らし。

関宿城博物館には、房総の河川 の利根川・江戸川の近世~近現代や産業・暮らしに関する展示が行われています。

当時の絵図。
関宿は、河岸の町となり、積荷を扱う商人が集まり、蔵が建ち並び、市場が開かれました。茶屋、旅籠、遊廓。賭場なども当然のごとく生まれました。*1

蒸気船「通運丸」が明治10年に就航し、関宿と両国(墨田区)を結びました。

関宿は、周囲を河川に囲まれ、水害が多かったため、人々は、土を盛って高くしたところに、水塚(みずか)と呼ばれる小屋(洪水時の避難施設)を作って、水がひくまでここに寝泊まりしました。

参考文献

*1 林上 川と流域の地理学 風媒社 2021.10

P.114
関宿は、河岸の町となり、積荷を扱う商人が集まり、蔵が建ち並び、市…

関宿(関宿城博物館)畑の中にそびえ立つ怪しげな天守閣。

今回は、関宿(せきやど、千葉県野田市)の町並みを散歩します。
東武動物公園駅から、バスで30分、そして徒歩で15分。畑の中に怪しげな天守閣がそびえたっています。

関宿城(せきやどじょう)は、野田市関宿三軒家にあった日本の城ですが、現在は、再現され現在は、千葉県立関宿城博物館になっています。

博物館の入口。

天守閣の最上階からの眺め。

出版のお知らせ

WordPressの本を書きました。Amazonでお買い求め頂けます。

 本書は、本来ブログ用ソフトであったWordPressを、Webサイト用のソフト(CMS)として活用するためのノウハウをまとめたものです。
 ブログは、記事を時系列で羅列したものです。ブログ記事が蓄積されると、たとえば、文献の情報のページを作り、これとブログ記事を連携させたいというような要望ができています。このような場合、サブクエリー(WP_Query)やサブループの記述などにPHPのコーディングが必要となるのですが、カスタマイズを進めていいくにつれ、PHPコードの量も増えメンテナンスの工数も増えます。
 本書は、PHPのコード量が多くてもメンテナンスが継続できるよう、類似のコードをクラスにまとめて再利用する方法について基本知識をまとめたものです。

タイトル:オブジェクト指向WordPress
著者名:風きよし
発行:古今東西舎
発売日:2020年9月1日
価格:¥1,700+税

WordPressからLeafletのポップアップを操作する

事例の概要

地図表示でマーカーを表示するとき、マーカーをクリックするとポップアップ表示するだけでなく、外部のテキストからポップアップを開くことができれば、より便利です(下図)。

この機能を実現するためには、Leaflet側のマーカーのポップアップとWordPressで表示するテキスト表示を動的に連動させることが必要です。

コード量も増えるので、再利用しやすいようにClassに分けて記述することが理想的です。

【お知らせ】
上記の事例3に示すオブジェクト指向(MVCモデル)の使い方については、本書で詳しく解説しています。


コード例

事例1:外部からLeafletを操作

事例の概要

本事例は、「Leaflet 外部からポップアップを開く」をもとに作成しました。

コード例
<body>
    <div id="map_1" style="height: 400px;"></div>
</body>

<p>
<a href="1234map_1"onmouseover="popupOn1(0);">【東京都】</a>
<a href="3456map_1" onmouseover="popupOn1(1);">【千葉県】</a>
<a href="589map_1" onmouseover="popupOn1(2);">【埼玉県】</a>
</p>

<script>
//背景地図
	var osm = new L.tileLayer
		('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    		maxZoom: 19,
    		attribution: "Map data © <a href='https://www.openstreetmap.org/copyright' target='_blank'>OpenStreetMap</a> contributors"
		});
	
	var map_1 = L.map('map_1', {
		layers: [osm],	
		center: [35.6896, 139.6918],
		zoom: 9,
    	zoomControl: true
		});

//マーカー情報
  var markers=[];	
	markers[0]=L.marker([35.6896, 139.6918]).addTo(map_1).bindPopup("東京都");
    markers[1]=L.marker([35.6050, 140.1234]).addTo(map_1).bindPopup("千葉県");
    markers[2]=L.marker([35.8572, 139.6490]).addTo(map_1).bindPopup("埼玉県");

//ポップアップを開く関数
  function popupOn1(id){
    markers[id].openPopup();
  }

</script>
上記コードの実行結果

【東京都】 【千葉県】 【埼玉県】

事例2:WordPressのループ処理とLeafletの連携

事例の概要

本事例は、WordPressのサブクエリーによってテキストデータを動的に表示し、そのループ処理の中でLeafletのマーカー表示を行い、WordPressのテキスト側からLeafletのポップアップ操作を行う事例です。

 冒頭のstatic public $const = array() ;でクラス定数$constを定義します。これは、ループ処理の中でマーカーの情報を一時的に格納するための配列定数です。
 $the_query = new WP_Query($args) ;にてサブクエリーを実行します。
 テキストを表示するWhileループの中で、クラス定数$constに、 緯度($lat),経度( $lon), コンテンツのタイトル($title)などを格納します。以上がPHPの処理です。
 次に、HTMLによる背景地図の設定を行います。
 <div id="map_2" style="height: 400px;"></div>
 最後にLeaflet.jsによる描画処理を行います。

コード例
static public $const = array() ;//クラス定数を定義
	
	public function __construct()
	{

//サブクエリー(テキストを抽出)
	$args = array(
		'post_type' => 'post',
		'tax_query' => array(
		'relation' => 'AND',
			array(
				'taxonomy' => 'region',			
				'field' => 'term_id',
				'terms' => '9790',//中央区
			),
			array(
				'taxonomy' => 'genre',				
				'field' => 'term_id',
				'terms' => '10274',//商店街
			)
		)
	);
	$the_query = new WP_Query($args) ;
//サブループ
	if($the_query->have_posts()){
		While($the_query->have_posts()){
			$the_query->the_post();
				$count++;
//表示(View)部分
	//クラス定数へ緯度経度情報を書き込み
			$array = code40307::$const ;//クラス定数を読み込み
			$num = $count-1 ;
			$id = get_the_ID() ;
			$title = get_post($id)->post_title ;
			$lat = get_post_meta($id, 'latitude', true);//緯度
			$lon = get_post_meta($id, 'longitude', true);//経度
			$array[] = [$id, $lat, $lon, $num, $title];//多次元配列に要素を追加
			code40307::$const = $array ;//クラス定数へ書き込み
	//HTML記述
			?><a class="<?php
				echo $par2->id ;
				echo ' ' ;
				echo 'tag' ;
			?>"href="<?php
				echo get_permalink();
			?>" onmouseover="<?php
				echo 'popupOn2('.$num.');' ;
			?>"><?php
				the_title() ;
				echo "<br>\n" ;
			?></a><?php
					
		}//endwhile
	}//endif

//事物表示
	//クラス定数の呼び出し
	$map_marker_json = json_encode(code40307::$const);
	//地図エリアの設定
	?>
	<body>
    	<div id="map_2" style="height: 400px;"></div>
	</body>

<script>
//背景地図
	var osm = new L.tileLayer
	('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    	maxZoom: 19,
    	attribution: "Map data © <a href='https://www.openstreetmap.org/copyright' target='_blank'>OpenStreetMap</a> contributors"
	});	
	var map_2 = L.map('map_2', {
		layers: [osm],	
		center: [35.664897,139.776624],
		zoom: 15,
    	zoomControl: true
		});

//マーカー表示	
	var array = JSON.parse('<?php echo $map_marker_json; ?>');
	var addmarker2=[];
	var i = 0
	//ループ
	array.forEach(function(id){
    	addmarker2[i]=L.marker([id[1],id[2]]).addTo(map_2).bindPopup(id[4]);
		i++;
	});//endeach

//ポップアップを開く関数
	function popupOn2(id){
		addmarker2[id].openPopup();
	}	
	
</script>
上記コードの実行結果
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。
築地(築地場外市場)寺院の建物と市場の建物がつながっています。

事例3:MVCモデルにLeafletを組み込む

事例の概要

  • 事例2で示したコードは、①WordPressのサブクエリー・サブループによるテキスト表示、②HTMLによる背景地図の表示、③Leaflet.jsによる事物の描画を順に行うものでした。
  • 本事例では、コードの再利用性を高めることを目的に、①②③をそれぞれ別のClassに記述します。

コード例

//外部からLeafletを操作する(オブジエクト指向MVCモデル)
class code40309
{

static public $const = array() ;//クラス定数を定義
	
	public function __construct()
	{
		$args = array(
			'model' => '37694',
			'view' => '40309',
			'pattern_m' => 'Sour',
			'entity_from' => 'Term',
			'entity_to' => 'Post',
			'post_type' => 'post',
			'orand' => 'and',			
			'tax' => array('region','genre'),//地域、ジャンル
			'field_value' => array('9809','10274'),	//台東区、商店街		
		);
		$user = new Controller37694($args) ;
	
		$user = new View40309Map() ;
		
		$user = new View40309Mapmarker() ;
			
	}
}

//表示を行うクラス(View)
class View40309
{
	public function __construct($par)
	{
		$array2 = code40309::$const ;//クラス定数を読み込み
		$num = $par->num ;
		$num = $num-1 ;
		$id = get_the_ID() ;
		$title = get_post($id)->post_title ;
		$lat = get_post_meta($id, 'latitude', true);//緯度
		$lon = get_post_meta($id, 'longitude', true);//経度
		$array2[] = [$id, $lat, $lon, $num, $title];//多次元配列に要素を追加
		code40309::$const = $array2 ;//クラス定数へ書き込み
				
		?><a class="<?php
			echo $par2->id ;
			echo ' ' ;
			echo 'tag' ;
		?>"href="<?php
			echo get_permalink();
		?>" onmouseover="<?php
			echo 'popupOn('.$num.');' ;
		?>"><?php	
			the_title() ;
			echo "<br>\n" ;
		?></a><?php

	}//endfunction
}//endclass


//背景地図を表示するクラス
class View40309Map
{
	public function __construct()
	{
?>
	<body>
    	<div id="map_3" style="height: 400px;"></div>
	</body>

<script>
	var osm = new L.tileLayer
	('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    	maxZoom: 19,
    	attribution: "Map data © <a href='https://www.openstreetmap.org/copyright' target='_blank'>OpenStreetMap</a> contributors"
	});
	
	var map_3 = L.map('map_3', {
		//layers: [osm,old1],
		layers: [osm],	
		center: [35.712364,139.787258],
		zoom: 14,
    	zoomControl: true
		});
</script>

<?php
	}//endfunction
}//endclass

//マーカーを表示するクラス
class View40309Mapmarker
{
	public function __construct()
	{
		$map_marker_json2 = json_encode(code40309::$const);
		?>
<script>
		var array = JSON.parse('<?php echo $map_marker_json2; ?>');
		var addmarker=[];
		var i = 0
		array.forEach(function(id){
    		addmarker[i]=L.marker([id[1],id[2]]).addTo(map_3).bindPopup(id[4]);
			i++;
		});//endeach

  //ポップアップを開く関数
  function popupOn(id){
    addmarker[id].openPopup();
  }

</script>
<?php
	}//endfunction
}//endclass

上記コードの実行結果

浅草橋(おかず横丁)昔ながらの商店街。重厚な看板建築。
上野(アメ横センター地下食品街)日本の中の異国。
浅草(浅草地下街)700円の理髪店。昭和の匂いの残る地下街。
入谷~吉原(せんわ通り)美しい柳並木。水道尻。
入谷~吉原(金美館通り)映画館の名前の通りです。

ER図活用によるWebサイトの全体デザイン

ER図

WordPressの投稿タイプやタクソノミーを理解しようとするとき、ER図を書いてみると、視覚的に理解しやすくなります。

データの集合をエンティティと呼びます。下図は、3つのエンティティ(ブログ投稿、市区町村、ジャンル)をデータの実例付きで図示したものです。
 ER図では、主キーと外部キーを記述します。主キーは、図056の最左端のデータ項目で、エンティティのレコードを識別します。表の右端にある「市区町村ID」「ジャンルID」は、それ自身が別のエンティティの主キーとなり得るデータ項目で、外部キーと呼ばれます。 一つのエンティティに主キーは必ず一つですが、外部キーは複数持つことができます。図では、ブログ投稿は二つの外部キーを持つことによって、「ジャンル」と「市区町村」2つのエンティティを関連を持っています。
 また、「市区町村」の事例は、外部キーが自身の主キーと結びつく「親子関係」のエンティティの事例です。

ブログ投稿と市区町村の関係は、1:N

・1つのブログ投稿に対し1つの市区町村が関連。
・その市区町村は別のブログ投稿とも関連。

ブログ投稿とジャンルの関係は、N:N

・ジャンルは、1つのブログ投稿に対し複数設定可能。
(例)
西仲通り商店街は、「商店街」と「路地」に関連

市区町村は親子ループ(1:N)を持つ

・1つの親は1つまたは複数の子を持つ。
・子に対し、親は1つ。
・同一エンティティの中で主キーと外部キーが結びつく(親子関係)。

主キーと外部キー

上記のER図の主キーと外部キーのみを表記すると下図のようになります。主キーと外部キーに注目すると、下記4パターンに集約されます。
ⓐDestinationパターン
ⓑSourceパターン(MetaQuery、TaxQuery)
ⓒAncestorsパターン(現世代→先祖)
ⓓDescendantsパターン(現世代→子孫)

WEBサイトの要件をER図に書き表す

Webサイトを開発する前に全体のデザイン(設計)をすることが必要です。まず、エンティティを抽出し、それらの関連づけを行うための主キー、外部キーはを決めることが重要です。

下図は当サイトの場合のER図の事例です。WordPressは投稿タイプとタクソノミーの2種類がありますので、どちらにするかも最初にするかを決めておく必要があります。

WordPressの外部キー

エンティティ同士の関連には、
 ❶投稿タイプとタクソノミーの関連づけ
 ❷投稿タイプのカスタムフィールドによる関連づけ
 ❸parentフィールドによる親子関係の関連づけ
の3種類があります。

オブジェクト指向によるWordPressへのMVCモデル適用

WordPressはイベント駆動型モデルであると言われています。これは、URLを指定するだけで自動的にデータを取得(メインクエリー)し、自動的にテンプレートファイルを選択して画面表示(メインループ)するものです。

しかし、カスタム投稿タイプやカスタムタクソノミーを使ったWebアプリケーション開発に重きを置く場合は、サブクエリーを多用する場面が増えてきます。

WordPressには、サブクエリーを効率よく開発するためのモデルがありません。

今回は、サブクエリーを効率よく開発するために、MVCモデルを適用することについて解説します。

MVCモデルは、Modelクラス、Viewクラスにコードを集約し、オブジェックト指向の継承やオーバーライドを使って、類似のコードを抽象化することによって、コーディングの作業を軽減することができます。

次にオブジェクト指向でないコード(従来の書き方)とMVCモデルを使ったオブジェクト指向のコードを比較してみることにします。

オブジェクト指向でないコード

//サブクエリー
	 $args = array(		
 //条件の記述
	 );
 //WP_Query
	 $the_query = new WP_Query($args) ;

//サブループ
	 if($the_query->have_posts()){
	   While($the_query->have_posts()){
		   $the_query->the_post();
		     //表示の記述
		     the_title() ;
	       echo "<br>\n" ;	
	   }
	 }//endif

オブジェクト指向のコード(MVCモデル)

class Controller
{
 public function __construct($var){
	   $par =(object)$var;
	   $user = new Model($args);
   または
   $user = new ViewPost() ;
   $user->format();
 }
}

class Model
{
	public function __construct($var)
	{
	
//サブクエリー
		$args = array(		
  //条件の記述
		);
  //WP_Query
		$the_query = new WP_Query($args) ;

//サブループ
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					//Viewクラスの呼び出し
					$user = new ViewPost() ;
                                 $user->format();
			}
		}//endif
	}//endfunction
}//endclass

class View
{
public function __format()	

	}//endfunction
}//endclass

class ViewPost extends View
{
public function __format()
			//表示
			the_title() ;
			echo "<br>\n" ;		
	}//endfunction
}//endclass
//呼び出す側 
$args = arry(
//条件の記述
);
$user  = new Controller($args);

サブクエリー(WP_Query)とサブループは、書き方のパータンがたくさんあり、すべてのパターンを覚えるのは大変なことです。そのため、書くたびにコードディングミスが起こり、完成するまでに時間がかかります。当然のことながら、これをメンテする作業も大変です。

これに対し、オブジェクト指向で書かれたコードは、呼び出す側は、フィルタリング条件を記述してクラスを呼び出すだけで、サブクエリー~サブループ~表示までの処理が完了します。
 もちろん、呼び出される側のクラスとして、Controllerクラス、Modelクラス、Viewクラスがあり、これらのコードを合わせると、オブジェクト指向を使った場合の方がコードの量は格段に増えます。しかし、これらのクラスは、再利用することを前提に作成していますので、次回からは、呼び出す側の記述のみで済みます。
 また、クラスには、スーパークラス(親クラス)の機能を継承して、差分の部分のみをサブクラス(子クラス)に記述することができ、メンテの効率が向上します。

WordPressの基本構造の概念図

WordPressの基本の理解で最も重要なことは、構造の理解です。理解するためには、図で示すことが最も近道です。
WordPressは、クエリーとループから成り立っています。

クエリー:データの検索
ループ:データの表示

WordPressの入門時に一番初めに理解すべきことは、メインクエリーとメインループですが、メインクエリーは「WordPressコア」と呼ばれる基本部分に包含されていて、通常はカスタマイズできないということです。(メインクエリーをカスタマイズするには、「フック」という特別なカスタマイズ方法を用います。)

WordPressの基本構造の概念図

WordPressのカスタマイズを理解の第一歩は、テーマの中にあるメインループを見つけ出し、ループの中の記述を自分の好みに合うようにカスタマイズし、実感をつかむことです。

<?php 
if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//
		// この部分が記述(カスタマイズ)部分
		//
	} // end while
} // end if
?>

上記のコードのif ( have_posts() )から} // end ifまでがメインループの記述で、その内側の部分がカスタマイズ部分で、ここに、たとえば、the_title();と書けば、投稿のタイトルが表示され、the_content();と書けば、投稿の本文が表示されるわけです。

<?php 
if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//記述(カスタマイズ)部分
          the_title();
          the_content();
		//
	} // end while
} // end if
?>

もう一つ重要なポイントは、このメインループが実行される手前の段階で、「WordPressコア」の中のメインクエリーが、既に実行を完了しており、その結果がオブジェクトと呼ばれるデータの塊に保持されているということです。この塊から具体的なデータを抜き出す命令が、the_title();the_content();です。このとき、データは複数件あるので、これをメインループで回して表示しています。

WordPressのカスタマイズで頻繁に出てくるサブループについては、上記の概念図に併記すると理解が深まります。
メインクエリーが「WordPressコア」の中にあって、自動的に実行されるものであるのに対し、サブクエリーは、自分でコードを書く(カスタマイズする)ことが必要ですが、行っている処理は、メインクエリーと同じです。(両方ともWP_Queryが実行されている同じ処理。)

サブクエリーの結果は、オブジェクトに出力され、それを表示するのがサブループです。メインループとサブループの書き方は、ほぼ同じです。

上記の概念図では、左から右へ「クエリー」「ループ」「表示」と情報が転送され、全体としては、上から下へ「メイン」「サブ」と処理が進んでいくことを図示しています。

WP_Queryのカスタマイズ事例(4)万能型サブクエリー

これまで、WP_Queryのカスタマイズ事例※1※2※3を示してきましたが、今回は、このうちのDestinationパターン※1とSourceパターン※2の事例を統合した万能型サブクエリーについて解説します。

参考記事

※1 WP_Queryのカスタマイズ事例(1)Destinationパターン2020-06-10
※2 WP_Queryのカスタマイズ事例(2)Sourceパターン( meta_queryとtax_query)2020-06-20

コード例

事例1:万能型カスタムWP_Query

呼び出す側

$args = array(
	'model' => '37694',
	'view' => '37694',
	'pattern_m' => 'Sour',
	'entity_from' => 'Term',
	'entity_to' => 'Post',
	'post_type' => 'post',
	'tax' => array('region','genre'),//タクソノミー名:地域、ジャンル
	'field_value' => array('9790','10274'),	//タクソノミーの値:中央区、商店街		
);
$user = new Controller37694($args) ;

Controllerクラス

class Controller37694
{	
	
	public function __construct($args)
	{
//////配列をオブジェクトに変換
		$par =(object)$args;
//////Modelメソッドの呼び出し
			$model_name = 'Model'.$par->model ;	
			$model_obj = new $model_name($par) ;
	}//endfunction
}//endclass

Modelクラス

class Model37694
{
	public function __construct($par)
	{
//参照パターン毎に$argsの値を設定するため、分岐させるための$args_nameの値を設定。

		$args_name = $par->pattern_m.$par->entity_from.$par->entity_to ;
		if ($args_name == 'SourTermPost'){

			$query_name = 'tax_query' ;
		}elseif($args_name == 'SourPostPost'){
			$query_name = 'meta_query' ;		
		}
			$args = array(
				'order' => $par->order,
				'orderby' => $par->orderby,
				'include' => $par->foreign_key,//タクソノミー用DPT
				'hide_empty' => false,//Listのとき要DPT
    			'meta_key' => $par->meta_key,//DPP
				'post_type' => $par->post_type,//DPP
				'post__in' => $par->foreign_key,//DPP
				'posts_per_page' => -1,//全行表示DPP
				$query_name => array(
				'relation'  => $par->orand ,
					array(
						'taxonomy' => $par->tax[0],
						'field' => 'term_id',//STP
						'terms' => $par->field_value[0],//STP
						'key' => $par->field[0],//SPP
						'value' => $par->field_value[0],//SPP
					),
					array(
						'taxonomy' => $par->tax[1],
						'field' => 'term_id',//STP
						'terms' => $par->field_value[1],//STP
						'key' => $par->field[1],//SPP
						'value' => $par->field_value[1],//SPP
					)
				)
			);

		if ($args_name == 'DestPostTerm'){
			$the_query = get_terms($par->tax, $args);			
		}else{
			$the_query = new WP_Query($args) ;
		}

		
////////////////////表示ループ
//Viewクラスのクラス名を設定
	$view_name = 'View' . $par->view;
	$num = 0 ;
		
//表示するエンティティがpostの場合
	if ($par->entity_to == 'Post'){
//while文でのループ処理
		if ( $the_query->have_posts() ) {
			while ( $the_query->have_posts() ) {
				$the_query->the_post();
					$num = $loopcounter++ +1;
					if ($num == '1' && !empty($par->title)){

						echo '<h2>' . $par->title . '</h2>' ;//タイトルを表示
 					}
//カウントアップした番号$numをオブジェクト$parに設定
					$par->num = $num ;
				
//Viewオブジェクトをインスタンス化
					$view_obj = new $view_name($par);				
			}// end while
			wp_reset_postdata();
		}//end if
		
//表示するエンティティがtermの場合
	}elseif ($par->entity_to == 'Term'){
		echo '<h2>' . $par->title . '</h2>' ;

//foreach文でのループ処理
		foreach ($the_query as $term){
		$num = $loopcounter++ +1;
//カウントアップした番号$numと表示するオブジェクト$termをオブジェクト$parに設定
			$par->term = $term ;

//Viewオブジェクトをインスタンス化
			$view_obj = new $view_name($par);
		}//endforeach

	}else{
	}//endif
	}//endfunction

}//endclass

Viewクラス

class View37694
{
	public function __construct($par)
	{
		the_title() ;
		echo "<br>\n" ;	
	}//endfunction
}//endclass
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。
築地(築地場外市場)寺院の建物と市場の建物がつながっています。

WP_Queryのカスタマイズ事例(3)親子( 先祖・子孫)クエリー。

カスタム投稿タイプの先祖の表示。

前回※1 「投稿のカスタムフィールドに関連付けられた投稿の表示」で、ブログ記事に文献の情報を関連付ける事例を紹介しました。(実際の画面サンプルはこちらです。)

この例では、「第八章 月島の商業」が関連付けられていますが、この上の階層である「第三編 明治以降の月島」と最上位階層である書籍名の「月島発展史」を併せて表示しています。

カスタム投稿タイプ「参考文献」は、親子関係を持った木(ツリー)構造になっていて、最初に関連付けされた「第八章 月島の商業」をキーに、祖先(父母→祖父母)の階層を表示しています。

リスト37639は、カスタム投稿タイプの祖先を表示するコードです。

カスタム投稿タイプの子孫の表示。

カスタム投稿タイプ「参考文献」の全体を一覧表示する場合は、階層のトップのIDを指定し、それをキーに子孫の階層を上から順番に検索して表示します。(実際の画面サンプルはこちらです。)

リスト37639は、投稿の子孫を表示するコードです。WordPressのテンプレートタグ「get posts」を使って子孫を検索しています。 

タクソノミーの祖先と子孫の表示

木(ツリー)構造を持つタクソノミーの全体を表示する事例を紹介します。(実際の画面サンプルはこちらです。)

たとえば「中央区」を選択した場合、祖先に東京都、子孫に月島3丁目があります。これらの表示をクリックするとどちらにでも移動できるようにすると便利です。また、自分が現在どの階層にいるかも解りやすくなります。

リスト36732は、タクソノミーの祖先と子孫の両方を表示する事例です。現世代の「中央区」を指定すると、まずその先祖を表示し、次に子孫を表示します。

コード例

事例1:カスタム投稿の先祖を表示

呼び出す側

$par2->gen_id = '18661';
$par2->post_type = 'reference' ;
$user = new Model37639() ;
    $user->generation($par2) ;

呼び出される側(クラス)

class Model37639 extends WP_Query
{
	public function generation($par2)
	{
		$ance = array() ;
		$ance = get_ancestors($par2->gen_id, $par2->post_type) ;
		//$cnt = count($ance);
		$ance = array_reverse($ance) ;
		$k = 0 ;
		While ( !empty($ance[$k])) {
			$par2->id = $ance[$k] ;
			$par2->k = $k  ;
			$View_obj = new View37639a($par2) ;
			$k = $k +1 ;
		}//endwhile
	}//endfunction

}//endclass

class View37639a
{
	public function __construct($par2)
	{
		$postslist = get_post($par2->id) ;
 		setup_postdata($postslist);
		echo $postslist->post_title."<br>\n" ;
		
	}//endfunction
}//endclass

Warning: Creating default object from empty value in /home/xs663544/kokontouzai.jp/public_html/wp-content/plugins/wp-OOP/wp-OOP-CodeSample.php on line 508

ID: 18661
先祖
k=0 18444月島発展史
k=1 18665第三編 明治以後の月島
現世代
k=2 18661第八章 月島の商業

事例2:カスタム投稿の子孫を表示

呼び出す側

$par2->gen_id = '18444';
$par2->post_type = 'reference' ;
echo "<br>\n".'ID: '.$par2->gen_id."<br>\n" ;
$user = new Model37642() ;
    $user->generation($par2) ;

呼び出される側(クラス)

class Model37642 extends WP_Query
{
	public function __construct()
	{
//コンストラクタは、なぜ今回使わないのか。
	}//endfunction
	
	public function generation($par2)
	{

//現世代を表示
		echo '現世代'."<br>\n" ;
		$par2->id = $par2->gen_id ;
		$par2->k = 0 ;
		$View_obj = new View37642a($par2) ;
		
//子孫を表示
		echo '子孫'."<br>\n" ;
		$this->children($par2) ;		
	}
	
	public function children($par2)
	{
//抽出処理
		$k = $par2->k ;	
		$args = array(
			'post_type' => $par2->post_type ,			
			'post_parent' => $par2->id ,
			'orderby' => 'menu_order',
			'order'   => 'ASC',
		);
		$the_query = get_posts($args) ;
		if(empty($the_query)){
			return ;
		}
//ループ処理
		$k = $k +1 ;
		foreach($the_query as $query){
			$par2->id = $query->ID ;
			$par2->k = $k ;			
			$View_obj = new View37642a($par2) ;
			$this->children($par2) ;//再帰処理。
		}
		
	}//endfunction
}//endclass

class View37642a
{
	public function __construct($par2)
	{
		$postslist = get_post($par2->id) ;
 		setup_postdata($postslist);
		echo 'k='.$par2->k.' '.$par2->id ;
		echo $postslist->post_title."<br>\n" ;
		
	}//endfunction
}//endclass

Warning: Creating default object from empty value in /home/xs663544/kokontouzai.jp/public_html/wp-content/plugins/wp-OOP/wp-OOP-CodeSample.php on line 433

ID: 18444
現世代
k=0 18444月島発展史
子孫
k=1 18669第二編 江戶時代の月島
k=2 18675第一章 石川島佃島の塡築
k=1 18665第三編 明治以後の月島
k=2 18445第二章 月島、新佃島の填築
k=2 18661第八章 月島の商業

事例3:タクソノミーの先祖と子孫を同時表示

呼び出す側

$par2->gen_id = '9790';
$par2->entity_name = 'region' ;
echo "<br>\n".'ID: '.$par2->gen_id."<br>\n" ;
$user = new Model36732() ;
    $user->generation($par2) ;

呼び出される側(クラス)

class Model36732//計算するクラス。
{
	public function __construct()
	{
//コンストラクタは、なぜ今回使わないのか。
	}//endfunction
	
	public function generation($par2)
	{
		$ance = array() ;
		$ance = get_ancestors($par2->gen_id, $par2->entity_name) ;
		//$cnt = count($ance);
		$ance = array_reverse($ance) ;

//////先祖が存在しない場合、$anceは中身は空なので、次の処理へ進む。
//先祖を表示。
echo '先祖'."<br>\n" ;
		$k = 0 ;
		While ( !empty($ance[$k])) {
			$par2->id = $ance[$k] ;
			$par2->k = $k ;
			$View_obj = new View36732a($par2) ;
			$k = $k +1 ;
		}//endwhile

//現世代を表示
echo '現世代'."<br>\n" ;
		$par2->id = $par2->gen_id ;
		$par2->k = $k ;
		$View_obj = new View36732a($par2) ;
		
//子孫を表示
echo '子孫'."<br>\n" ;
		$this->children($par2) ;		
	}
	
	public function children($par2)
	{
//抽出処理
		$k = $par2->k ;	
		$args = array(
			'parent' => $par2->id ,	
		);
		$the_query = get_terms($par2->entity_name, $args) ;
		if(empty($the_query)){	
			return ;
		}
//ループ処理
		$k = $k +1 ;
		foreach($the_query as $term){
			$par2->id = $term->term_id ;
			$par2->term = $term ;//$par2に追加。
			$par2->k = $k ;//$par2に追加。
			$View_obj = new View36732b($par2) ;
			$this->children($par2) ;//再帰処理。
		}
		
	}//endfunction
}//endclass

class View36732a//表示するクラス。
{
	public function __construct($par2)
	{
		$term = get_term($par2->id , $par2->entity_name ) ;
		echo 'k='.$par2->k.' '.$par2->id ;
		echo $term->name."<br>\n" ;
	}//endfunction

}//endclass

class View36732b//表示するクラス。
{
	public function __construct($par2)
	{
		echo 'k='.$par2->k.' '.$par2->id ;
		echo $par2->term->name."<br>\n" ;
	}//endfunction

}//endclass

Warning: Creating default object from empty value in /home/xs663544/kokontouzai.jp/public_html/wp-content/plugins/wp-OOP/wp-OOP-CodeSample.php on line 564

ID: 9790
先祖
k=0 7079全国
k=1 2740東京都
現世代
k=2 9790中央区
子孫
k=3 12405日本橋富沢町
k=3 12406日本橋大伝馬町
k=3 12355日本橋室町2丁目
k=3 12404日本橋室町1丁目
k=3 12370日本橋室町3丁目
k=3 10160日本橋人形町二丁目
k=3 10161日本橋箱崎町
k=3 10162日本橋小網町
k=3 10163日本橋人形町三丁目
k=3 10164日本橋中洲
k=3 10506築地4丁目
k=3 10507築地6丁目
k=3 10508築地7丁目
k=3 10509新川2丁目
k=3 2747銀座二丁目
k=3 2748八丁堀三丁目
k=3 2749新富1丁目
k=3 2750京橋三丁目
k=3 2751日本橋人形町一丁目
k=3 2752新川1丁目
k=3 7442八丁堀二丁目
k=3 9788築地2丁目
k=3 9789月島3丁目
k=3 9880佃1丁目
k=3 9903八重洲一丁目
k=3 9907日本橋本町一丁目
k=3 9908八重洲二丁目
k=3 10058銀座八丁目
k=3 10059銀座七丁目
k=3 10061銀座三丁目
k=3 10062銀座四丁目
k=3 10063銀座五丁目
k=3 10064銀座六丁目
k=3 10076日本橋本町四丁目

WP_Queryのカスタマイズ事例(2)Sourceパターン( meta_queryとtax_query)

リスト37167は、meta_queryの事例。
リスト37179は、tax_queryの事例です。

この記事を参照している記事

WP_Queryのカスタマイズ事例(4)万能型サブクエリー
WP_Queryのカスタマイズ事例(1)Destinationパターン

コード例

事例1:Sourceパターン(Post→Post) meta_query

class code37167
{
	public function __construct()
	{
		$args = array(
			'model' => '37167',
			'view' => '37167',
			'post_type' => 'post',
			'field' => array('ref'),//参考文献
			'field_value' => array('18661'),//第八章 月島の商業
		);
		$user = new Controller37167($args) ;
	}//endfunction
}//endclass

class Controller37167
{	
	
	public function __construct($args)
	{
//////配列をオブジェクトに変換
		$par =(object)$args;
//////Modelメソッドの呼び出し
			$model_name = 'Model'.$par->model ;	
			$model_obj = new $model_name($par) ;
	}//endfunction
}//endclass

class Model37167
{
	public function __construct($par)
	{
		$args = array(		
			'post_type' => $par->post_type,
			'meta_query' => array(
			'relation' => 'OR',
				array(
					'key' => $par->field[0],
					'value' => $par->field_value[0],
				)
			)
		);
		$the_query = new WP_Query($args) ;

//ループ~表示処理(Viewクラス)の呼び出し。
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					$view_name = 'View'.$par->view ;
					$view_obj = new $view_name($par) ;
			}
		}//endif
	}//endfunction

}//endclass

class View37167
{
	public function __construct($par)
	{
		the_title() ;
		echo "<br>\n" ;
	}//endfunction
}//endclass
築地(和風スナック)沢の鶴の看板。月島三丁目。
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。

事例2:Sourceパターン(Term→Post) tax_query

class code37179
{
	public function __construct()
	{
		$args = array(
			'model' => '37179',
			'view' => '37179',
			'tax' => array('region','genre'),//タクソノミー名:地域、ジャンル
			'field_value' => array('9790','10274'),	//タクソノミーの値:中央区、商店街		
			'post_type' => 'post',//投稿タイプ:ブログ記事
		);
		$user = new Controller37179($args) ;
	}//endfunction
}//endclass

class Controller37179
{	
	public function __construct($args)
	{
//////配列をオブジェクトに変換
		$par =(object)$args;
//////Modelクラスの呼び出し
		$model_name = 'Model'.$par->model ;	
		$model_obj = new $model_name($par) ;
	}//endfunction
}//endclass

class Model37179//投稿を表示
{
	public function __construct($par)
	{

		$args = array(		
			'post_type' => $par->post_type,
			'tax_query' => array(
			'relation' => 'OR',
				array(
					'taxonomy' => $par->tax[0],				
					'field' => 'term_id',
					'terms' => $par->field_value[0],
				),
				array(
					'taxonomy' => $par->tax[1],				
					'field' => 'term_id',
					'terms' => $par->field_value[1],
				)
			)
		);
		$the_query = new WP_Query($args) ;

//ループ~表示処理(Viewクラス)の呼び出し。
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					$view_name = 'View'.$par->view ;
					$view_obj = new $view_name($par) ;
			}
		}//endif
	}//endfunction
}//endclass


class View37179
{
	public function __construct($par)
	{
		the_title() ;
		echo "<br>\n" ;
	}//endfunction
}//endclass
人形町(日本橋大伝馬町の路地)江戸の下水道が現代に引き継がれています。
人形町(問屋橋跡北側の路地)日本橋富沢町。浜町川跡の商店街。
人形町(真砂座の碑)明治39年、夏目漱石「猫」上演。
日本橋(てんぷら天松)昭和11年創業。
日本橋(清水理美容院)理容室と美容院。
日本橋(十軒店跡の碑)江戸時代の仮設専門店街。人形市。
日本橋(浮世小路)浮世ショウジ。落語「百川」の舞台。
茂原(榎町商店街)カラフルな看板建築建物群。
浅草橋(おかず横丁)昔ながらの商店街。重厚な看板建築。
関内(アートビル)1階にあったベンチはメリーさんの指定席。
川崎南町(名画通り)路地にまっすぐに伸びる側溝。
信濃町(味の名店街)レトロ感漂う駅前ビルの地下。
日立(日立銀座通りの写真)駅構内の写真展。
長崎丸山(銅座市場跡)現在は取り壊されています。
板橋(プラザ板橋)1階はL字型の飲食街。
板橋(坂下マーケット)ゲートだけが残っています。
板橋(トンネルマーケット)立喰いそば屋脇のトンネル。
成増(成増マーケット)すずらん通りの昭和の空間。
町田(仲見世商店街)西のアメ横とよばれています。
佐原(カメラの三越)3階建て。天体望遠鏡。
船橋(仲通り商店会)Y字路の商店街。
歌舞伎町(三経ビル)ポストモダン建築。
上野(アメ横センター地下食品街)日本の中の異国。
池袋(ロサ会館)昭和43年に竣工した娯楽ビル。
池袋(のとや会館)ヤミ市の最後の賑わいの頃に開業。
銀座(名店「三州屋銀座店」)1968年創業の老舗割烹。
銀座(金春小路)かつては置屋や待合が並ぶ花街。
銀座(路地の中の自動ドア)通り抜けできます。
銀座(豊岩稲荷)130年以上前の銀座煉瓦街時代の名残。
銀座(三愛ビル)1963年開業の銀座のランドマーク。
銀座(出世地蔵尊)昭和27年のキャバレー「美松」の火事で移転。
銀座(キャバレー美松跡地)現在の三越百貨店新館がある場所。
銀座(三原小路隣の袋小路)2階建ての長屋形式の店舗。
日本橋(老舗カレー店)開業50周年
日本橋(鳥萬)戦前の建物。4階建てのように見える3階建て。
日本橋(大勝軒)昭和32年の建築。緑のタイル。
日本橋(老舗割烹「嶋村」)嘉永3年(1850年)創業。金ぷら
日本橋(アダルトグッズ店)TENGAあります。
日本橋(理容室跡)木々が生い茂る中のサインポール。
日本橋(雀荘)オフィス街の中に10軒近く。
日本橋(花街跡)横丁や路地に遊興の歴史。
小岩(駅裏の商店街)小さな小島のような一画。
北千住(商業ビルの通路)1階部分に数か所。日常的な通路。
北千住(駅前の商業ビル)1階に飲食店や商店、2階と3階は住居部分。
高田馬場(女神の像)昭和37年の駅前再開発。
王子(スーパー「ほりぶん」)王子のシンボル。
王子(いなり通り)かつて花街があった場所の商店街。
人形町(小春軒)山県有朋のお抱え料理人が創業。
人形町(金刀比羅宮)芳町芸妓組合、新田新作が寄進。
人形町(浜田家)芳町唯一の料亭
人形町(思案橋)吉原へ行こうか、芝居に行こうか。
人形町(桃乳舎)芸術的な看板建築。桃のマーク。
人形町(高尾稲荷社)高尾大夫の霊を祭っている稲荷神社。
人形町(キラク)1951年開業。年季の入った看板と暖簾。
人形町(歯科医院のゴミ箱)特注の備え付けタイプ。
人形町(㐂寿司)かつての花街の記憶が残る建物。
人形町(よし梅本店)戦火を免れて残った店。
大塚(三業通り)看板がリニューアル。芸者さんのモニュメント。
錦糸町(旅館の建物)建物の屋上のネオン看板。
築地(日の出湯)佃小橋から見える煙突付きマンション。
築地(和風スナック)沢の鶴の看板。月島三丁目。
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。
築地(旅館大宗)純和風。周囲は、高層ビルが建ちち並びます。
築地(看板建築)3階建て。正面から見ると2階建て。
築地(築地場外市場)寺院の建物と市場の建物がつながっています。
築地(天婦ら「おかめ」)昭和初期からある料理屋です。
築地(料亭「新喜楽」)芥川賞や直木賞の選考会場。
亀戸(亀七通り商店街)大看板。両側にゲート。
福富町(長者町八丁目共同ビル)マッサージ店の看板。
福富町(福仲ビル)商店街共同建築。2階と3階は居住部分。
天王町(横浜洪福寺松原商店街)朝獲れの鯖。
磯子(浜マーケット)戦後の闇市が発展してできました。
磯子(丸山市場)美空ひばりの生家の近く。
新川(於岩稲荷田宮神社)花柳界や歌舞伎関係者が参詣。
新川(新川大神宮)酒問屋が信仰。待合と芸妓屋が集中していた場所。
新川(料理屋「増田や」跡)現在は居酒屋チェーンの店舗。
丸の内(長者町繊維街)看板が連なります。
荒木町(車力門通り)荒木町三業地の入口。
藤岡(割烹料理屋「花月」)仲町の通り。料理屋が建ち並ぶ一画。
相模原(タンクトップ)西門商店街。日用品の店舗。
武蔵小杉(センターロード小杉)超ミニスカスッチー。
門前仲町(清住庭園東側共同ビル)3階建ての長屋建築。
綱島(駅ビル商店街)昭和レトロな雰囲気。
新富町(正金アパート)昭和の初期からあるアパート。
新富町(路地)昔ながらの路地。飲食店の看板。
新富町(花街跡)新富座の開業とともに芸妓、置屋が増加。
新富町(新島原遊廓跡地)外国人のための遊廓。
巣鴨(地蔵通り商店街)巣鴨名物「お地蔵様の赤パン」。
麻布(元麻布の長屋)高層マンションとのアンバランスな対比。
吉祥寺(のれん小路)かつては小さな飲み屋が連なっていた横丁。
吉祥寺(ハモニカ横丁)終戦直後の闇市の姿。
新橋(ニュー新橋ビル)闇市跡にできた雑居ビル。
日暮里(繊維問屋街)コスプレ人気で活況を呈しています。
高山(末広二番街)花岡遊廓跡地の東側。
浅草(浅草地下街)700円の理髪店。昭和の匂いの残る地下街。
長崎丸山(銅座市場)通り抜けられません。
戸部(岩亀横丁)「がんき」の屋号を持つ寿司屋、サウナ。
南千住(三ノ輪商店街)荒川区随一の大商店街。
日本橋(理髪店)昭和5年築の看板建築。モダンなデザイン。
日本橋(麻雀クラブ富士)昭和25年頃は「パチンコ富士」でした。

WP_Queryのカスタマイズ事例(1)Destinationパターン

今回は、投稿データに関連付けられたタクソノミーや別の投稿を表示する方法について紹介します。

WP_Queryは、あるデータの集合(これをエンティティと呼びます)の外部キーから別のエンティティの主キーを検索しデータ群(オブジェクト)取得する仕組み(クラス)です。
 WordPressの場合のエンティティは、「投稿タイプ」「カスタム投稿」「カテゴリー」「ターム」「カスタムタクソノミー」などのデータの集合です。これらのエンティティ同士は、主キーと外部キーで関連付けられます。

下図は、ブログ投稿の外部キーにカスタムタクソノミー「ジャンル」が関連づけられている場合を図示したものです。

Destinationパターン

リスト37209は、投稿のカスタムフィールドに関連付けられた投稿の表示の事例です。
ブログ記事のような投稿データに、別の投稿データを関連づけて表示したい場合があります。

リスト37211は、投稿に関連付けられたタクソノミーの表示の事例です。
ブログ記事のような投稿データには、タクソノミー(カテゴリー、タグ)を関連づけて記事の分類分けをしますが、このとき、ブログ記事のタイトルの上部や本文の末尾などにタクソノミーを表示したい場合があります。

ブログ投稿(Post)とジャンル(Term)のER図

参考記事

※1 WP_Queryのカスタマイズ事例(2)Sourceパターン( meta_queryとtax_query)

この記事を参照している記事

WP_Queryのカスタマイズ事例(4)万能型サブクエリー

コード例

事例1:Destinationパターン(Post→Post)

class code37209
{
	public function __construct()
	{	
		$user = new Model37209() ;
	}//endfunction
}//endclass

class Model37209 extends WP_Query
{
	public function __construct()
	{
		$args = array(		
			'post_type' => 'post',
			'post__in' => array('18348'),//IDを配列で指定。
		);
		$the_query = new WP_Query($args) ;		

//ループ~表示処理(Viewクラス)の呼び出し。
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					$view_obj = new View37209($par) ;
			}
		}//endif
	}//endfunction

}//endclass

class View37209
{
	public function __construct($par)//$parはいらない。
	{
		the_title() ;
		echo "<br>\n" ;
		
//次の処理の準備
//投稿に関連付けられているカスタムフィールドのIDを取得する。
	$myposts = get_post_meta(get_the_ID(), 'ref', false) ;//'ref'を指定。
	if (!empty($myposts)){
		$par->foreign_key = $myposts ;
		$user = new Model37209a($par) ;
	}else{
		return ;
	}
		
	}//endfunction
}//endclass

class Model37209a
{
	public function __construct($par)
	{	
		$args1 = array(
			'post__in' => $par->foreign_key,//配列をそのまま記述
			'post_type' => 'reference',//DPP
		);
		$the_query = new WP_Query($args1) ;//WP_Query	

//ループ~表示処理(Viewクラス)の呼び出し。
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					$view_obj = new View37209a($par) ;
			}
		}//endif
	}//endfunction

}//endclass

class View37209a
{
	public function __construct($par)
	{

		the_title() ;
		echo "<br>\n" ;
		
	}//endfunction
}//endclass
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。

Warning: Creating default object from empty value in /home/xs663544/kokontouzai.jp/public_html/wp-content/plugins/wp-OOP/wp-OOP-CodeSample.php on line 781
第八章 月島の商業
月島再発見学

事例2:Destinationパターン(Post→Term)

class code37211
{
	public function __construct()
	{	
		$user = new Model37211() ;
	}//endfunction
}//endclass

class Model37211
{
	public function __construct()
	{
		$args = array(		
			'post_type' => 'post',
			'post__in' => array('18348'),//IDを配列で指定。
		);
		$the_query = new WP_Query($args) ;		

//ループ~表示処理(Viewクラス)の呼び出し。
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					$view_obj = new View37211($par) ;
			}
		}//endif
	}//endfunction

}//endclass

class View37211
{
	public function __construct($par)
	{
		the_title() ;
		echo "<br>\n" ;

//次の処理の準備
//投稿に関連付けられているタクソノミーのIDを取得する。
			$myterms = wp_get_object_terms(get_the_ID(), 'region');
			if (!empty($myterms)){
				$foreign_key = array() ;
				foreach ($myterms as $post){
					array_push( $foreign_key , $post->term_id);
				}
			}else{
				return ;
			}//endif		
		
		$par->foreign_key = $foreign_key ;
		$user = new Model37211a($par) ;
		
	}//endfunction
}//endclass

class Model37211a
{
	public function __construct($par)
	{

		$args = array(		
			'include' => $par->foreign_key,
		);
		$the_query = get_terms('region', $args) ;		

//ループ~表示処理(Viewクラス)の呼び出し。
		foreach ($the_query as $term){
			$par->term = $term ;
				$view_obj = new View37211a($par) ;			
		}
	}//endfunction

}//endclass

class View37211a
{
	public function __construct($par)
	{
		echo $par->term->name."<br>\n" ;
		
	}//endfunction
}//endclass
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。

Warning: Creating default object from empty value in /home/xs663544/kokontouzai.jp/public_html/wp-content/plugins/wp-OOP/wp-OOP-CodeSample.php on line 703
月島3丁目

WP_Queryのカスタマイズ

サブクラスにおいてWP_Queryを使うことのメリットは、拡張(継承)してカスタムクラスを作れることです。Rakhitha Nimesh Ratnayake(ラーキサ・ニーメシュ・ラーネヤク)は、その著書「WordPressによるWebアプリケーション開発」の中で、WP_Queryクラスの継承の用例を示しています。*1

リスト37188は、ラーネヤク氏が示した用例を本書のテーマに即してアレンジしたものです。
通常、WP_Queryを使うときは、次のように配列にすべてのフィルタリング条件を記述しなければなりませんが、リスト37188では、Modelクラスの中にこの記述を書いているので、呼び出す側は、1行のコードのみで済みます。

たしかに、同じフィルタリング条件を何度も繰り返し使う場合はこの方法が有効であり、クラスを継承すれば、少し異なる条件の場合も含めて抽象化できるかもしれません。

しかし、あらゆるパターンのサブクエリー(投稿の場合、タームの場合、親子の場合)と表示をすべて網羅的に抽象化するためには、もう一工夫必要です。

リスト36618は、リスト37188をアレンジし、この課題を解決するための方法です。

呼び出す側に、フィルタリング条件を羅列しますが、そこには値を直接記述します。これを受け取ったModelクラスは、その値をWP_Queryのフィルタリング条件にあてはめます。
この方法のメリットは、面倒なWP_Queryの記述から解放されるということです。
さらに、表示するViewクラスの名称なども呼び出す側の条件に加えることにより、サブクエリーから表示までを一貫して抽象化することができそうです。

参考記事

※1 PHPのコードをパーツ化する方法(2)クラスを使う方法2020-04-30

コード例

事例1:WP_Queryの拡張①Ratnayake氏の方法

呼び出す側

$the_query = new Model37188();
//ループ
if($the_query->have_posts()){
	While($the_query->have_posts()){
		$the_query->the_post();
		//Viewの記述	
		$view_obj = new View37188($par2) ;			
	}
	wp_reset_postdata();
}//endif

Modelクラス

class Model37188 extends WP_Query
{
	public function __construct( $args = array() )
	{
//クエリー	
		$args = wp_parse_args( $args, array(
			'post_type' => 'glossary',
			'meta_query' => array(
			'relation' => 'AND',
				array(
					'key' => 'gloss_type',
					'value' => '9851',
				),
				array(
					'key' => 'region',
					'value' => '9790',
				)
			)
		)
		);
		parent::__construct($args) ;
		
	}
}

Viewクラス

class View37188
{
	public function __construct($par2)
	{
		the_title() ;
		echo "<br>\n" ;	
	}//endfunction
}//endclass

事例2:WP_Queryの拡張②アレンジした方法

呼び出す側

$args = array(
	'post_type' => 'glossary',
	'key' => array('gloss_type','region'),
	'value' => array('9851','9790')	
	);
$query = new Model36618($args);

Modelクラス

class Model36618 extends WP_Query
{
	public function __construct($var)
	{
//配列をオブジエクトに変換。
	$par =(object)$var;
//クエリー	
		$args = array(	
			'post_type' => $par->post_type,
			'meta_query' => array(
			'relation' => 'AND',
				array(
					'key' => $par->key[0],
					'value' => $par->value[0],
				),
				array(
					'key' => $par->key[1],
					'value' => $par->value[1],
				)
			)
		);
		
		$the_query = new WP_Query($args) ;
//ループ
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
				//Viewの記述	
				$view_obj = new View36618($par2) ;			
			}
			wp_reset_postdata();
		}//endif
		
	}
}

Viewクラス

class View36618
{
	public function __construct($par2)
	{
		the_title() ;
		echo "<br>\n" ;	
	}//endfunction
}//endclass

Leaflet入門

「Leaflet」は、Webサイトに地図を載せる場合に利用するツールです。
「Leaflet」はフリーソフトでありながら、細かなオプションが用意されているのが特徴です。

リスト1 は、背景となる地図(ベース地図)を表示するコードです。
WordPressにLeafletを埋め込む場合は、事前準備として、function.phpに、Leafletを読み込むコードを記述します。

コード例

事例1:Leaflet入門(背景地図の表示)

function.php

まず、事前準備として、次のコードをfunction.phpに記述します。

function leaflet_enqueue_styles() {
    wp_enqueue_style( 'leaflet-style', '//unpkg.com/leaflet@1.5.1/dist/leaflet.css', NULL, NULL );
}
add_action( 'wp_enqueue_scripts', 'leaflet_enqueue_styles' );
/* 先にスタイルシートを読み込んでからJavaScriptを読み込む */
function leaflet_enqueue_script() {
    wp_enqueue_script( 'leaflet-js', '//unpkg.com/leaflet@1.5.1/dist/leaflet-src.js', NULL, NULL );
}
add_action('wp_enqueue_scripts', 'leaflet_enqueue_script');

テンプレートファイル

次にテンプレートファイルに次のコードを記述します。

<body>
    <div id="map_1" style="height: 400px;"></div>
</body>

<script>
//////背景地図
	var osm = new L.tileLayer
	('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    	maxZoom: 19,
    	attribution: "Map data © <a href='https://www.openstreetmap.org/copyright' target='_blank'>OpenStreetMap</a> contributors"
	});
	
	var map_1 = L.map('map_1', {
		layers: [osm],	
		center: [35.717007,139.752772],
		zoom: 18,
    	zoomControl: true
		});
</script>

「日本版MapWarper」のジオリファレンス機能について

◆ジオリファレンスとは

古地図をWEB地図上に表示するためには、スキャナーやデジタルカメラなどを使って紙の地図をデジタル化し、それをWEB地図上に貼り付けるわけですが、このとき、
(1)古地図に緯度・経度の情報を付加する作業
(2)古地図を適切な形に整形して (ゆがめて) 現実の地図の上に置く作業
が必要です。この作業のことをジオリファレンスと言います。

◆日本版MapWarperについて

日本版MapWarper」は、このジオリファレンスを簡単に行うことができるツール(ジオリファレンサー)です。
オープンソース・ソフトウェアなので、誰でも無料で利用でき、公開した地図(されている地図)は、誰でも閲覧でき、ダウンロード利用できます。

◆「大正3年頃の鯖江図」のジオリファレンス事例

今回は、鯖江市が公開している古地図データ*1 を日本版MapWarperにアップロードして、ジオリファレンスを行います。

古地図

日本版MapWarperに会員登録し、ログインし、メニューの「地図をアップロードする」を使って古地図をアップロードします。

次に、「整形」の機能を使って、古地図を変形・伸縮させて現実の地図の座標に合うよう整形(ジオリファレンス)します。画面の左側が古地図、右側が現実の地図です。大正時代の地図は現在の地図にぴったりと重なりませんので、ここで補正を行います。両方の地図の一致する場所をダブルクリックして基準点を登録します。今回は、11か所の基準点を登録しました。①から⑪までの基準点が図示されています。

整形画面

最後に「切り抜き」の機能を使って古地図の余分な部分を取り除くと完成です。

「プレビュー」のタブに切り換えると、現実の地図の上に古地図が重ねられた状態が確認できます。*2

プレビュー画面

参考文献

*1 鯖江地区まちづくり推進協議会 鯖江市 古地図データ 鯖江市 リンク
大正3年頃の鯖江図 「新撰鯖江誌」より 1914 リンク

PHPのコードをパーツ化する方法(2)クラスを使う方法

前回※1、get_template_part()に引数を渡す方法を紹介しましたが、この方法では、
(1)呼び出す側にset_query_varと呼び出される側にget_query_varをその都度書かなければならないこと。
(2)PHPファイル別々に作成するので、見通しが悪くなること。
ことが、課題です。
そこで、今回は、これに代わる方法として、classを呼び出す方法を紹介します。


参考記事

※1 PHPのコードをパーツ化する方法(1)get_template_part()で引数を渡す方法2020-04-20

この記事を参照している記事

WP_Queryのカスタマイズ

コード例

事例1:WP_Queryの拡張②アレンジした方法

呼び出す側

$args = array(
	'post_type' => 'glossary',
	'key' => array('gloss_type','region'),
	'value' => array('9851','9790')	
	);
$query = new Model36618($args);

Modelクラス

class Model36618 extends WP_Query
{
	public function __construct($var)
	{
//配列をオブジエクトに変換。
	$par =(object)$var;
//クエリー	
		$args = array(	
			'post_type' => $par->post_type,
			'meta_query' => array(
			'relation' => 'AND',
				array(
					'key' => $par->key[0],
					'value' => $par->value[0],
				),
				array(
					'key' => $par->key[1],
					'value' => $par->value[1],
				)
			)
		);
		
		$the_query = new WP_Query($args) ;
//ループ
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
				//Viewの記述	
				$view_obj = new View36618($par2) ;			
			}
			wp_reset_postdata();
		}//endif
		
	}
}

Viewクラス

class View36618
{
	public function __construct($par2)
	{
		the_title() ;
		echo "<br>\n" ;	
	}//endfunction
}//endclass

PHPのコードをパーツ化する方法(1)get_template_part()で引数を渡す方法

WordPressのカスタマイズの規模が大きくなると、8割~9割は同じようなPHPのコードを何度も書いていることがあります。このようなときは、別ファイルを作成してソースコードを分割し、コードを再利用することにします。
分割した別ファイルは、get_template_part()によって呼び出しますが、このとき、再利用の度合いを高めるために引数を渡したい場合があります。

WordPressCodexには、テンプレートに変数を渡す方法が解説されています。
今回は、一例として、引数taxと引数termを渡して、テンプレート側サブクエリーを実行する例を紹介します。

この記事を参照している記事

PHPのコードをパーツ化する方法(2)クラスを使う方法

コード例

事例1:get_template_part()でサブクエリーを呼び出す方法

呼び出す側

$args = array(
	'tax' => 'region',
	'term' => '9789',			
);
set_query_var( 'val', $args) ; 
get_template_part( 'template-parts/sample/content', 'sample' );	

呼び出される側

<?php
//引数を受け取り
		$var = get_query_var('val');
		$par =(object)$var;
//サブクエリー
		$args = array(		
			'post_type' => 'post',
			'tax_query' => array(
				array(
					'taxonomy' => $par->tax,				
					'field' => 'term_id',
					'terms' => $par->term,
				)
			)
		);
		$the_query = new WP_Query($args) ;
//サブループ
		if($the_query->have_posts()){
			While($the_query->have_posts()){
				$the_query->the_post();
					//表示
					the_title() ;
					echo "<br>\n" ;
			}
		}//endif	
築地(和風スナック)沢の鶴の看板。月島三丁目。
築地(西仲通り商店街)明治時代の埋め立て工事により出来上がった町。

当面の間、散歩ブログの更新を休止致します。

◆新型コロナウイルスの感染拡大に伴い、当面の間、散歩ブログの更新を休止致します。

◆ブログトップのURLを下記の通り変更しました。
ご迷惑をおかけしますが、よろしくお願い致します。
(変更前)http://kokontouzai.jp/sanpo
(変更後)http://kokontouzai.jp/blog/sanpo

◆新たに、ITに関するブログの掲載を始めました。
(URL)http://kokontouzai.jp/blog/it

茂原(創業50年の洋食屋)店内は、バーのような雰囲気。

茂原駅前に建つ駅前ビル。1階は、飲食店街になっています。

昔ながらの洋食屋。

店内は、バーのような雰囲気。

ナポリタンとビールを注文。

茂原(桜湯)傍らに桜の木のある銭湯。房総横断道路近く。

房総横断道路から北へ入った通り。

銭湯の桜湯があります。

ペンキで書かれた「桜湯」の文字

傍らには、桜の木。屋号の由来の木でしょうか。

茂原(リップスティック)軽食店併設の風俗(サロン)店。

房総横断道路沿い。

交差点脇に1軒屋の建物。

サロン(風俗店)と軽食が併設された店舗です。

現在は休業している模様です。

茂原(榎町商店街)カラフルな看板建築建物群。

今回は、茂原(千葉県茂原市)の町並みを散歩します。
茂原の榎町商店街と駅前通り商店街は1970年代か ら1980年代に最盛期を迎えました。*1

現在も当時からの商店が建ち並んでいます。

商店街は500mほど続きます。東側の通りにも看板建築が残っています。

住居部分と一体となったお菓子屋さん。

参考文献

*1 新名阿津子 茂原市における中心商店街活性化への課題 筑波大学 地域研究年報28 2006 2006 リンク
Ⅱ-2 榎町・駅前通り商店街  榎町商店街はJR茂原駅から約500m圏から1 ㎞圏の範囲に位置し,昌平町…

上野(三軒長屋の商店の看板建築)3色3階建て。

佐竹商店街の東側(小島一丁目)の清洲橋通り。

三軒長屋の商店。色は3色です。

2階部分。

後方に、3階建て部分が見えます。

上野(佐竹商店街の看板建築)鮮やかな銅板。

佐竹商店街から西へ入った路地。

看板建築の建物が残っています。

銅板建築。

隣のトタン建築の物干し台。

上野(吉田屋モスリン店)佐竹商店街。入口に竹久夢二の作品。

佐竹商店街(台東3丁目)は、江戸時代に佐竹藩の屋敷があたことから名づけられた商店街で、南北300mに及ぶ長大な商店街です。

商店街にある「吉田屋」。

「モスリン店」※1 の看板が掲げられています。」

竹久夢二の作品。

上野(前田モスリン店)歩道橋から見えるモスリン(織物)の看板。

入谷の交差点。遠くには東京スカイツリーが見えます(写真左奥)。

北上野側の交差点の角のビルの2階部分に、「モスリン店」と書かれています。

 「モスリン(織物)」という呼び名は、毛斯綸紡織(株)(1896(明治29)年設立)の社名※1 や大阪の「モスリン大橋」という橋の名前※2 に使われました。明治時代の殖産興業政策を連想させる呼び名です。

歩道橋から見たモスリン店。

上野(燕湯)宮型銭湯とビル型銭湯の融合。

上野3丁目のビル街。

銭湯の燕湯は、国の登録有形文化財に指定されている貴重な銭湯です。

ビルの1階部分が宮型銭湯となっていますが、建物全体はビルになっている独特の建築です。

銭湯の裏側の通り。

上野(玩具問屋「上野屋」)創業は昭和25年。

上野アメ横の東側の通りにある玩具問屋「上野屋」。
創業は昭和25年(1950年)です。*1

店舗の前面には、マスク類が所狭しと陳列されています。宴会などで使用するおもちゃ類を販売しているようです。

看板には、「流行・教材・季節・景品・サービス・花火 各種玩具」「玩具問屋」と書かれています。
2階部分には懐かしいアニメなどのポスター類が貼られています。

ボビーオロゴン、美川憲一(コロッケ)。

参考文献

*1 玩具問屋 上野屋 玩具問屋 上野屋 公式ホームページ リンク
・上野アメ横 海産物食料品のメイン通りのおとなりで1950年(昭和25年)よりおもちゃ一筋で営業。 ・最新流…

上野(ビル街のラブホテル)仏壇店街近くの路地。

東上野三丁目のビル街。通り沿いには、仏壇店が連なっています。(写真の左右の店舗はいずれも仏壇店です。)

通りを南へ入ったところにあるラブホテル。

モダンなデザインの入口。

反対側(南側)から。

上野(純喫茶「古城」)ステンドグラスが美しい老舗喫茶店。

今回は、上野(東京都台東区)の町並みを散歩します。
JR上野駅の東側(東上野三丁目)のビルの地下1階にある純喫茶「古城」。

入口の階段のステンドグラスには、白馬の騎士が描かれています。

店内は、荘厳な雰囲気です。

ココアを注文。

幕張(中華料理「松楽」)チャーシューたっぷりチャーハン。

京成電鉄幕張駅前。線路沿いの通りに中華料理店があります。

「町中華」という言葉がぴったりくるような中華料理「松楽」。

テーブル席3つとカウンター席。

チャーハンとビールを注文。チャーハンには大きめのチャーシューがたくさん入っていて、風味と歯ごたえが充分です。

幕張(美容室「ローズ」)「パーマ」大看板のある木造家屋。

京成電鉄幕張駅近くの線路沿い。舗装されていない道の先。

美容室「ローズ」の看板

木造家屋の美容室です。

「パーマ」の大看板は、遠くからでも見えます。

幕張(鈴の湯)破風屋根の軒下には「鈴」のオブジェ。

幕張駅の北東側。徒歩5分のところにある銭湯の鈴の湯。

昔ながらの銭湯です。

銭湯には、破風屋根の軒下に細かな細工の懸魚(けぎょ)を見かけることがありますが、鈴の湯の場合は「鈴」のオブジェです。

「鈴の湯」と書かれた煙突。

幕張(UFO)宇宙船の丸窓がデザインされた外観。

今回は、幕張(千葉県千葉市花見川区)の町並みを散歩します。
JR幕張本郷駅の南側。京葉道路幕張インターの東側にラブホテル街に、宇宙船の形をしたラブホテルがあります。

正面入口。

入口のゲートには、ロケットを模したオブジェ。

宇宙船の丸窓。

新小岩(立ち飲み屋)名物は刺身盛り合わせ。

新小岩駅南口の平和橋通りから西へ入る小路。小路の先に飲み屋のほ灯が見えます。

立ち飲み屋「わか」。今年で30周年(暖簾に書いてありました。)だそうです。

周囲は、小規模な飲み屋街になっています。

名物の刺身盛り合わせとホッピーを注文。

新小岩(旭湯)住宅街にある昔ながらの銭湯。

江戸川区松島の住宅街の中にある銭湯の「旭湯」。

都内ではめずらしい、昔ながらの銭湯です。

中庭には金魚が泳いでいます。

建物の南側。

新小岩(住宅街のラブホテル)児童公園の隣の大ゲート。

今回は、新小岩(東京都葛飾区)の町並みを散歩します。
新小岩二丁目の住宅街。

児童公園の隣に大ゲートが出現します。

住宅街の中のラブホテル。

L字型の小路を抜けると反対側にもゲートがあります。

鶯谷(とんかつ店「とん平」)戦後開業の老舗。

鶯谷駅南口の前から言問い通りへ向かう坂道の下。

老舗とんかつ店「とん平」があります。開業は戦後だそうです。

カウンター席だけのこじんまりとした店です。とんかつはロースカツとヒレカツのみ。

ロースカツとライス、ビールを注文。

鶯谷(交差点角の質屋)圧倒的な3階建ての外観。

下谷1丁目の住宅街。

交差点の角に、古いコンクリート製の建物があります。1階には店舗。同じビルに質屋の看板が残っています。

建物の側面。

側面の窓の配置から、3階建ての建物であることが解ります。

鶯谷(プレイスポット「銀星」跡)屋上看板だけが残っています。

鶯谷駅前の「ダンスホール新世紀」。

隣のビルの屋上に残る「銀星 PLAYSPOT GINSEI」のレトロ大看板。パチンコ店か何かだったのでしょうか。現在、「銀星」の店舗はビル内には見当たりません。

1Fにある歌謡曲カフェ。

鶯谷駅からの遠望。

鶯谷(ラブホテル街)言問い通りの北側。敷地内に祠。

鶯谷のラブホテル街は、駅前の言問い通りの南側が中心ですが、言問い通りの北側にも大規模なホテル街が立地しています。

敷地内に祠のあるラブホテル(写真中央に祠の屋根が見えます。)

メインの通り。

西側には、高層階のホテルが建ち並んでいます。

鶯谷(スナック「シスター」)線路沿いの木造三階建ての建物群。

今回は、鶯谷(東京都台東区)の町並みを散歩します。
鶯谷駅南口の陸橋を渡った線路沿いに、木造三階建ての建物が連なっています。

飲み屋街。

スナックの入口。

シスタービル。

浅草橋(すし栄)かつては銀座で数店舗をれん分け。

浅草橋5丁目にある「すし栄」。

握り寿司とビールを注文。

かつての「すし栄」は銀座数店舗あったそうです。

ピンクの看板が目印です。地元の方の話によると、かつては「ピンク寿司」と呼ばれ親しまれていたそうです。

浅草橋(鶴の湯)料亭のような意匠。鶴が彫りこまれた懸魚。

蔵前橋通りの南側。浅草橋5丁目に、銭湯の鶴の湯があります。塀や建物の壁面は鮮やかな水色に塗られています。

鶴が彫りこまれた懸魚は見事です。

料亭の建物のような意匠。

入口。

浅草橋(おかず横丁の理美容室)バーバー、パーマの看板。

レトロな建物が残っているおかず横丁。

理容室(バーバー)。

レトロなパーマ屋さん。

交差点の角の赤い建物の美容室。

浅草橋(おかず横丁)昔ながらの商店街。重厚な看板建築。

浅草橋の北側。鳥越1丁目のおかず横丁。

看板建築の商店の建物など、昔の商店街の雰囲気が残っています。

銅板が貼れた重厚な感じの看板建築。

裏側からの眺め。

浅草橋(老舗やきとり店)篠塚稲荷神社の隣。

かつての花街があった柳橋一丁目。

篠塚稲荷神社の隣に、老舗やきとり店があります。

釜めしと焼き鳥。

焼き鳥定食と日本酒を注文。

浅草橋(花柳街跡地)墨田川沿い。現在はビル街に。

かつての柳橋の花街は、墨田川沿いにありました。
「昭和37年の柳橋マップ」*1 によると、この通りの東側(写真左側)に、「料亭深川亭」「料亭子安」「料亭卯の木」「料亭はやし」「料亭津久松」「料亭柳水」がありました。

佃煮屋の「小松屋」のマーク

反対側(南側)から。

墨田川からの遠望。現在はビルが建ち並んでいます。

参考文献

*1 西本頑司 柳橋 花柳界盛衰譚 日本文芸社 荷風!vol.12
P.34 昭和37年の柳橋マップ 墨田川沿いに、北から「料亭深川亭」「料亭子安」「料亭卯の木」「料亭は…

浅草橋(美家古寿司本店)創業は文化年間。風情のある路地。

今回は浅草橋(東京都台東区)の町並みを散歩します。
かつての花街だった柳橋の路地に老舗寿司店が営業中です。

建物は道を挟んで、本店は2棟あります。

創業は、文化5年。

風情のある路地。

参考文献

*1 美家古鮨本店 美家古鮨本店公式ホームページ リンク
文化年間(1804~1817)、初代 加藤赤助が始めた屋台が、美家古鮨本店のはじまりです。 慶應2年、二代目…

上野(寿湯)当時の佇まいを残す銭湯。稲荷町駅近く。

銀座線稲荷町駅近く。

銭湯の寿湯。

本格的な銭湯ですが、内部は改装されている部分もあって快適です。

入口。

上野(犬糞看板)繁華街からは少し離れた場所のブロック塀。

東上野五丁目。繁華街からは離れた場所です。

駐車場の脇に設置された犬糞看板。

ブロック塀は、犬がおしっこをかけやすい場所です。

非常識。犬のくそ!

上野(レンタルルーム)繁華街で多く見かける業態。

上野6丁目の繁華街にはレンタルルームが数軒点在しています。最近、繁華街で多く見かける業態です。

1階がラーメン店。2階がレンタルルーム。

赤い看板のレンタルルーム

英語と中国語の看板。

上野(老舗洋食店「とうかい」)小ぶりながらも味は絶品。

上野公園通りを北へ進んだところにある老舗洋食店の「とうかい」。

洋食店のメニューはひとおり揃っています。

店内は質素ですが、非常に落ち着きます。

オムライスとビールを注文。オムライスは小ぶりながらも味は絶品でした。

上野(吉原の妓楼「三浦屋」の再現展示)下町風俗資料館。

下町風俗資料館の2階の特別展示(令和元年12月7日~令和2年2月24日)は、資料館が所蔵する「江戸風俗人形」の展示です。
吉原の妓楼「三浦屋」を再現したものです。檜細工師・三浦宏氏による建物(模型)は30年以上も前に制作されたものだそうです。*1

内所」と呼ばれる、妓楼の楼主の居間。

格子を組んだ「張見世」。

花魁。

参考文献

*1 台東区立下町風俗資料館 特別展「江戸風俗人形」の世界 下町風俗資料館号外 2020.12.7
特別展「江戸風俗人形」世界 建物・人形・小物三位一体の妙 「江戸風俗人形」は、かつて日本有数の歓楽…

上野(大正期の下町の町並みを再現展示)下町風俗資料館。

上野公園にある台東区下町風俗資料館。

1階は大正時代の下町の町並みを再現した常設展示です。長屋の井戸端が再現されています。

物干し竿。

駄菓子屋の店内。

上野(カレー専門店「クラウン」)王冠のマークが目印。

今回は、上野(東京都台東区)の町並みを散歩します。
JR上野駅ガード下にあるカレー専門店「クラウン」。王冠のマークが目印です。

開業当時の上野の写真なども飾られていて、歴史を感じます。

自販機で食券を買います。大盛りはダブルまで。チキンカレーはチキンカツではありません。

カツカレー大盛りにさらに大盛り券(1枚)とビールを注文。満足のボリュームでした。