ああ
投稿者: ryokomura
予約投稿てすと
あああ
AstroでWP REST APIからページネーション
ワイのちっぽけな力と、お友達のChatGPTと偉大な先人たちの知恵のおかげで実装できました!
細かいソースはもう夜遅いのでまた今度書きますが、
ブログ記事の詳細ページにはWordpressのfunctions.phpからAPIにprevとnextの記事を出力するようにし、Astro側でpost.prev.idとかいう感じで受け取り、前後の記事を表示するようにし、
ブログの一覧はAstro側に新たにページネーション用のpageフォルダを設置、その中でAPIのheaderを取得しx-wp-totalpagesから10件ずつ分割したページ数を取得、その数をArrayに格納、mapで回して出力させました。
私にできるんかな・・・と若干大きな壁に感じておりましたがなんとか、なんとか自力で解決できて自信になりました!
Astroやれや
結局気になってWordpressの方いじっちゃった・・・・
そもそもAstroやるきっかけが、お客様のサイト高速化とリニューアルのご依頼で、できるだけ環境似せようとおもったらカスタムフィールドが必要やってん。
ただACFのプラグイン入ってるサイトやったから素直にACF入れりゃよかったのに、なんならAPI読んでるだけやからWP側の重さとか考えなくていいのに自作でカスタムフィールド作った。
ただ私の個人ブログではそこまで細分化しなくてもカテゴリとタグで賄えてしまって。。。
今日の気分とかでいっか。と「うきうき」「わくわく」「かなしみ」の3つのチェックボックスと、metaのdescriptionとkeyword用のテキストフィールドを設置完了。APIでも取れるようにした。
(ChatGPT様のおかげ)
function add_custom_meta_box() { add_meta_box('custom_meta_box', 'オプション', 'custom_meta_box_callback', 'post'); } add_action('add_meta_boxes', 'add_custom_meta_box'); function custom_meta_box_callback($post) { // ノンスフィールドを使ってフォームをセキュアにする wp_nonce_field('custom_meta_box_nonce', 'meta_box_nonce'); // チェックボックスの状態を取得 $checked_wakuwaku = get_post_meta($post->ID, 'meta_box_wakuwaku', true) === 'yes' ? 'checked' : ''; $checked_ukiuki = get_post_meta($post->ID, 'meta_box_ukiuki', true) === 'yes' ? 'checked' : ''; $checked_kanashimi = get_post_meta($post->ID, 'meta_box_kanashimi', true) === 'yes' ? 'checked' : ''; // チェックボックスを表示 echo '<p><label><input type="checkbox" name="meta_box_wakuwaku" ' . $checked_wakuwaku . '> わくわく</label></p>'; echo '<p><label><input type="checkbox" name="meta_box_ukiuki" ' . $checked_ukiuki . '> うきうき</label></p>'; echo '<p><label><input type="checkbox" name="meta_box_kanashimi" ' . $checked_kanashimi . '> かなしみ</label></p>'; // meta_descriptionの値を取得してテキストエリアとして表示 $meta_description = get_post_meta($post->ID, 'meta_description', true); echo '<p><label for="meta_description">メタディスクリプション:</label>'; echo '<textarea id="meta_description" name="meta_description" rows="4" cols="50">' . esc_textarea($meta_description) . '</textarea></p>'; // meta_keywordの値を取得してテキストエリアとして表示 $meta_keyword = get_post_meta($post->ID, 'meta_keyword', true); echo '<p><label for="meta_keyword">メタキーワード:</label>'; echo '<textarea id="meta_keyword" name="meta_keyword" rows="2" cols="50">' . esc_textarea($meta_keyword) . '</textarea></p>'; } function save_custom_meta_box_data($post_id) { // ノンスチェック if (!isset($_POST['meta_box_nonce']) || !wp_verify_nonce($_POST['meta_box_nonce'], 'custom_meta_box_nonce')) { return; } // 自動保存チェック if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } // 権限チェック if (!current_user_can('edit_post', $post_id)) { return; } // チェックボックスの値を更新 $wakuwaku = isset($_POST['meta_box_wakuwaku']) ? 'yes' : 'no'; $ukiuki = isset($_POST['meta_box_ukiuki']) ? 'yes' : 'no'; $kanashimi = isset($_POST['meta_box_kanashimi']) ? 'yes' : 'no'; update_post_meta($post_id, 'meta_box_wakuwaku', $wakuwaku); update_post_meta($post_id, 'meta_box_ukiuki', $ukiuki); update_post_meta($post_id, 'meta_box_kanashimi', $kanashimi); // meta_descriptionとmeta_keywordの値をサニタイズして保存 if (isset($_POST['meta_description'])) { update_post_meta($post_id, 'meta_description', sanitize_textarea_field($_POST['meta_description'])); } if (isset($_POST['meta_keyword'])) { update_post_meta($post_id, 'meta_keyword', sanitize_textarea_field($_POST['meta_keyword'])); } } add_action('save_post', 'save_custom_meta_box_data'); function get_custom_fields_for_rest($object, $field_name, $request) { // メタフィールドの値を取得 $wakuwaku = get_post_meta($object['id'], 'meta_box_wakuwaku', true); $ukiuki = get_post_meta($object['id'], 'meta_box_ukiuki', true); $kanashimi = get_post_meta($object['id'], 'meta_box_kanashimi', true); // チェックボックスの値に基づいて文字列を設定 $wakuwaku_value = ($wakuwaku === 'yes') ? 'わくわく' : '未選択'; $ukiuki_value = ($ukiuki === 'yes') ? 'うきうき' : '未選択'; $kanashimi_value = ($kanashimi === 'yes') ? 'かなしみ' : '未選択'; return array( 'wakuwaku' => $wakuwaku_value, 'ukiuki' => $ukiuki_value, 'kanashimi' => $kanashimi_value, 'meta_description' => get_post_meta($object['id'], 'meta_description', true), 'meta_keyword' => get_post_meta($object['id'], 'meta_keyword', true), ); }
上記でカスタムフィールドがでてきたし、
本当いうと管理画面側のcssも時間ができたらつくりたいな
はよAstroやれや
Astroでヘッドレス化をするお
何年放置のブログを触るんやと思いながらも、
WPのREST APIを使ってAstroでヘッドレス化にチャレンジ中。
Astroのチュートリアルを基本に、今担当しているお客様のサイトの仕様にあわせてカスタマイズはしつつ、大好きChat GPTに聞きつつ(ついに課金)
側近の仕事はFigmaでLPデザイン、いつもしてるのはコーディング、
たまにWordpress構築、そしてついにAstroに手を出し始めました
元々は高速化を望まれるお客様のためになんとかしたろと思って勉強しようとおもたんですが、
アサインされたコーダーさん別の人でつらみ。(私は社員じゃないから・・・)
ただどっかで絶対役に立つので、
頑張って作っていってます。
今Astroをローカル環境で立ち上げて、公式の言う通りNetlifyでビルドしております。
これもGithub Actionsでビルドできるようにしようかなと思ってます。
とりあえず仕組みさえ作ってしまえばと
そこからのデザインとHTMLは得意分野なので、
テキストのみのプレーンなページを展開中です。
https://curious-platypus-47b818.netlify.app/blog/
アニメーション関連のjsは書くことが多いけど、
こっち系は初めてというか微経験。
つまづいた部分など共有できればなと思います。
チェンマイなおやつたち
あっっーーーーーつい!!
凄まじい炎天下のチェンマイです。
暑さには丈夫なわてくしですが、
さすがにお昼間はゲストハウスや、カフェに引きこもり、暑さをしのいでみたり、ぼーっと過ごしたりしています。
結構いろいろカフェがあって、どこに入れば良いか困るのですが、今日は有名どころ、ニマンヘミンの「モンブラン」さんにお邪魔。
ストロベリーソーダと、バニラケーキ。
タイのカフェは長い事席についてても、別に文句は言われない感じですし、wifiがあってとってもありがたい。
暑いお昼の時間をまったりと過ごし、
ゲストハウスに戻ると、こんなものが。
これ、「タマリンド」と呼ばれるフルーツ?です。
卵みたいに固い殻をわって、中身を取り出し、筋をよけて食べます。
なんというか、干し柿みたいな食感と、手に持つとちょっとべたつく感じですが、
これが、甘いなかにちょっとだけ酸味があって、不思議と食べ出すと止まらない感じに。
なんというか、お茶うけとかにぴったりな甘さです。
生のタマリンドもあって、フルーツが売られている屋台なんかであったりするんだけど、見た目はマンゴーぽく、味付けがピクルスっぽく。。でこちらはあまり美味しくなかったです・・・
そういえば、こないだ今年初!スイカを先にいただきました。
あまくて、冷えてておいしかったー!
でもカフェでコーヒー1杯が50bするのに、
安い食堂では35bでご飯食べれてしまう、謎。
明日は何を食べようかな?
たのしみなりょこむらでした。
チェンマイ旧市街を歩く
今日は、朝から事前に調べていた、
「solao」というソムタム(青パパイヤ)の美味しい店へ。
色々な方の旅ブログをあさっていたら、
あれ?ここ近所で見た事があるぞ・・・!
となって、調べてみたら近所の忍者ラーメンのすぐそば!
地元のお店なのでドキドキしながら入り、
椅子に座るとメニューを持ってきてくれます。
メニューを見ていると、
ソムタムよりも気になる物が・・・
それはヤムウンセン!(春雨サラダ)
日本でもタイ料理屋さんでよく頼んでいたし、
ゲストハウス(slowhouse)さんの近くにある食堂(コンドミニアムの駐車場みたいなとこにある)で
おばちゃんが作ってくれる豚の春雨サラダはよく食べていたのですが、
シーフードが乗ったものに誘惑されてしまい、
結局朝ご飯はこれになりました!
彩りよくもられたヤムウンセン。
小さめなのでカオニャオ(もち米を蒸したもの)を頼もうか悩んだのですが、
貧乏学生生活ですし、スーパーで買い込んだおやつを沢山食べておりますので
こいつだけに(といっても69b)
一口。ぱくり。
んんままーーーーーーい!
酸味が爽やかで、かといってナンプラー臭くもない。
トマトの甘さも引き立ってるし、魚の練り物もはいってて彩り豊か。
うん。これはまた食べにこよう。
(てかソムタム食えよ)
実はね・・ソムタムに関してはお気に入りが
近所のスーパーにあるとですよ・・・(ガートスワンケーオのフードコート)
フードコートのおばちゃんのソムタム、
味付けがわたす好みでして・・・
その後、またゲストハウスに戻りました。
チェンマイは気温40度近く!(3月)
お昼間出歩いたら死んでしまいます!
英語の宿題をしていたらとんでもなく眠くなってきたので、一眠り・・・
そして、おやつをかきこみ、
またーり本を読み、
夕方からいそいそと出かける準備です。
今日むかったのは、アムリタガーデンさん。
マクロビな菜食メニューを取り扱っているカフェ&ゲストハウスです。
私が滞在している場所から、旧市街の門をくぐります。
夕暮れ時 スアンドーク門
お目当ては「マンゴーチーズケーキ」
チェンマイのスタバにもおろしているという、
絶品チーズケーキです。
本来はUpper Crust Caféという、チェンマイ駅付近のカフェが本家らしいのですが、チェンマイ駅は旧市街のお堀をつっきって、ピン川を超えてさらに・・・となると歩きにはキツいとおもっていたのですが、
ここアムリタガーデンでも食べれるとの事で訪れたのでした。
ただ、私、うまれつき方向感覚が備わっておらず、
googlemap見ても位置がわからず、、
迷いに迷って暗くなってしまいました。
(普通の人はわかります。看板もでてます。)
やっとのことでたどりつくと、もう真っ暗。
やっと出会えたチーズケーキ!
店内はかわいくおしゃれ。
子犬たちが出迎えてくれました。
ただ、雷がゴロゴロ。
雨が振ってはソンテウに乗ってかえらないといけないので(払いたくない)
早めにかえろうと、ぱくぱく食べていると、
日本人ぽい風貌のべっぴんさんが来店。
おもわず「日本の方ですか?」と
声をかけてみたら、「はい、そうです!」と。
彼女は同い年くらいで、ヨガを習いにチェンマイの山の方に滞在していたみたい。
明日が帰る日で、今日たまたま来たみたい!
いろいろ話も弾み、カフェを去る。
途中の道路まで、一緒にでて、「気をつけて帰ってね!」とさよなら。
突然あった人と、仲良くなれてしまう。
旅の良いとこかもしれない。
人生のうち一瞬だけど、
何かご縁があってこんな出会いがあるなんて、
ほんと楽しいなぁと。
ドイステープのミサンガのおかげかしら?
歩き疲れた一日。
シャワー浴びて、扇風機まわして寝転んだら、超きもちいい。
明日はサンデーマーケットに・・・
いこうと思う!多分!
今日も楽しかった!
チェンマイ滞在記 ドイ・ステープ寺院へ
昨日の豪雨でチェンマイは過ごしやすい適温に!
こりゃお出かけ日和!
とまず、近所のカオマンガイ屋さんを探す
・・・がみつからない!
探しても見つからないけど脳内はカオマンガイで出来上がってるので、
結局大型デパートのMAYAにてカオマンガイ(40b)を。
なんというか、フードコートでも鶏肉だけははずれが無い。
でも、ちゃんとした店のカオマンガイも食べなきゃなー
英語のレッスンをおえ、ずっと行きたかった土の家のカフェに。
Din Dee(ディンディー)
せっかくここまできたので、
チーズケーキ(70b)とミルクティ(40b)
(ミルクティがくる前にとりました)
ゆったりできる空間でしたので、そこで宿題をすませました。
ゲストハウスに帰り、皆と観光にでることに。
ドイステープというチェンマイいち有名であろう山の上の寺院へ。
夕方から行く、ということで、ぼったくられないようにと、
寝不足なのにゲストハウスのスタッフさんがついてきてくれる事に。
ありがたい〜
私たちがいるゲストハウスから、
まずソンテウでチェンマイ動物園をすぎたあたりのバスターミナルへ(20b)。
そこからドイステープにあがるソンテウに乗り換えます。(行き40、帰り80b)
ここでスポーツ系のチャリンコと一緒に陽気なおじちゃんが乗ってきたー!
私たちと一緒にソンテウにのった外人さんとも英語で話すし、
満員のソンテウで後ろに乗っかってきた男の人2人にタイ語でしゃべるし、
とにかく喋る!
わたしが隣だったため、英語で話しかけられましたが、
出来うる限り応戦!
上りはソンテウで、下りだけチャリらしい・・・
バンコクから来た方で、東京に3回来た事があるらしい。
札幌に行ってみたいみたいんだーとか
おっちゃんのマシンガントークを聞いていると酔ってきたので、
進行方向を見つめるようにしました。
ドイステープに到着!
本当は外国人だと30b取られるみたいですが
タイの人ぶってスルー。
寺院に入ると美しい建物が!!
すごい!きらびやか!!
にゃんちゃんがカメラを向けると超良いポーズしてくれました。
わんこもいるぞ!!
そして、スタッフ君のおすすめでお祈りをしてもらう事に。
竹の束みたいのに水をつけて、頭にかけられ、
お坊さんにミサンガを結んでもらいました。
これ、願いがかなうミサンガなのです・・・!
寺院の裏でチェンマイが一望出来るので、
少し日が落ちるまで見ていました。
ここで兄弟っぽいわんこがやってきて、
兄の方が弟にちょっかいだして超はしゃいでて。
かわいいなーっておもってたら、
はしゃぎすぎて兄、すってんころりん。(笑)
床、滑りやすいもんね・・・w
すてきな景色を後にして、
スタッフ君おすすめのチェンマイ大学の食堂街?へ。
めっちゃ巨大な食堂街で、しかも服とか雑貨とかも沢山あります。
店によりけりなんでしょうが、私たちが行った店は
空いている席に座るとメニューを持ってきてくれるので、
テーブルの上にある紙をみて、
メニューの名前 値段 数 を書きます。
メニューがあるので、マネて書いたら注文出来そうな感じです!
本日の晩餐 ガパオライス 35b
お腹がすいてたからか、辛いけどうんまー!
その後、屋台できになったおやつを購入(20b / 6こ入り)
スタッフ君が最後まで面倒見てくれました。
本当にありがたい。
ゲストハウスについたら、
ドイステープにいっしょに上がった子が何やら嬉しそうにしている!
いろんな国を旅してる子で、スマホを旅の途中で無くしていたらしいけど、
なんと、見つかったらしい!!
その子はスマホを失った傷を癒しにチェンマイに来たそうなので、
ドイステープの願い、速攻叶った!
本当に素敵な一日でした。
体調不良にも関わらず、面倒を最後まで見てくれたスタッフ君。
本当に素敵で、人のために全力で何かすることが当たり前の事のように行動しています。
タイの人に、日本人はいいやつだ、って思われたいと。
日本の人に、タイはいいところだ、って思われたいと。
その気持ちが伝わってきます。
前、フィリピンにいたときも、こんなお世話をしてくれた方に出会って旅が素敵な物になりました。
彼らは、どうして人を助ける事を当たり前に出来るんだろう。
自分自身をみつめるきっかけになったし、
見習いたいし、ただただ感謝しかありません。
旅先でそういう人に出会えるという運の良さにも、感謝。
本当に素敵な一日でした。
チェンマイでプチ英語留学!
今日は事前に申し込んでいた、
TES English schoolさんへ。
チェンマイで1ヶ月、
何もすることなーい!ってなりそうなんですが、
何かしらの学校に行きたい!と思っていたので、
日本語のHPだったので、問い合わせをし、体験に行く事に。
朝、10時。
灼熱のチェンマイを歩く・・・
英語の授業は1日2クラス。
曜日によって違いますが、文法と会話のクラスです。
とっても小さな学校で、
学びに来ているのは早期退職した方や、
チェンマイにゴルフをしにきている方。
ちょっと年代が上の方が多いです。
私は日本で問い合わせをしたときから、
授業に関係ないチェンマイについて質問にたくさん答えてくれていた事と、
どちらかというと海外旅行で自分のしたい事を達成する為のみに英語を勉強したいので、スパルタンよりゆるい雰囲気がよかったのと、熱くて他の学校に行きたくない。という理由でこの学校に決めてきました。
1時間半の授業が15回で5200バーツ(16000円)位。
場所はニマンヘミンのsoi2です。
ニマンヘミンといえば、チェンマイのおしゃれ通りなので、
散策がとっても楽しみ(熱いのはやだ)
朝の授業が終われば、
次はお昼ご飯!
ニマンヘミンの通りに入る時にある、
「MAYAショッピングセンター」の中の
お目当てはフードコート!
安いし、頼みやすいしありがたい!
ここでチェンマイらしいご飯を食べてみました
「カオソーイ」40b
フードコートだから、と侮っていたのですが、
結構美味しかった。
特に、どーんと入った骨付きの鶏肉。
ほろほろでんまし!!
昼からまた学校にもどって、授業。
今度はカナダの先生の授業です。
隣にいるおばあちゃんが、とても勉強熱心でかわいい!
そして授業がおわると、
帰り道に「タピオカドリンクバー」を目指し歩いたのですが、
小さく迷い・・・
やっとたどり着いたら、微笑みの国らしく
ほほえんでタピオカドリンクを作ってくれました。
「パールミルクティ」30b
量が普通のLサイズ位あったのでとっても嬉しい^^
冷たい甘さが熱さでのぼせた身体をいやします。
かえってきてからは、
ゲストハウスのスタッフさん
(タイ人なのに日本語がめちゃくちゃ上手!)
がスイカ食べますかー?って。
いただきました。日本より先取りのスイカ!!
これが、あっまくて冷たくておいしいーーー!
やっぱ熱い国はフルーツが美味しいですね^^
これからどんな美味しいご飯が食べれるんだろう・・・
ご飯のことばかり考えているりょこむらでした。
さぁいざチェンマイへ!
いやっほう!
今年ニュージーランドにいったばかりなんですが、
今自由の身ですのでこんな機会はない!と、
またまた海外へ!
今度は行きたかったタイ、バンコクはガヤガヤしていそうなんで、チェンマイに行くことにしました!
飛行機は前回お世話になった、大韓航空。
仁川空港の乗り継ぎの楽さと、
価格が安い!
航空券なんですが、多分大韓航空のサイトから直で購入するのが一番安いのではないかな?
今回の乗り継ぎは5時間。
前回は民族体験でお人形を作ったのですが、
仕事が何件かあったため、こなしつつ、シャワーを借りさっぱり出発に!
シャワーがある場所は到着し、乗り継ぎのセキュリティチェックが終わって降り立ったフロアから、1F上がったところ。
マッサージルームの隣に無料シャワーがあります。
さすがハブ空港な仁川だけあって、清潔です。
受付のお姉さんがおらず、隣のマッサージルームに来てくれ、とあったので行きますと、チケットとパスポートを提示して、タオルとシャンプー、ボディソープを受け取ります。
乗り継ぎですか?と確認されましたが、乗り継ぎじゃない人は利用に1000円かかるみたい。
シャワールームは小さな個室にシャワー、トイレがあり、
ハンドシャワーと固定式の上から降ってくるタイプのやつです。
無料のタオルはバスタオルではないので、小ささなりに駆使して体を拭きました。
下もびたびたになりますが、マットもないので体ふいたあとタオルでちょっと回りを綺麗にしました。
ドライヤーは1〜5番の部屋にあるとのことで、空いてるから勝手にあるとこに無事入れました。
さっぱりしてたら、後一時間位になったので、出発ゲートへ。
でも、おなかすいたなぁなんて思っていたら、フードコートの文字。
大好きな冷麺があるぽい!
機内食でるしなぁ、覗いてみるだけ見てみよう!と入り口へのエスカレーターへ。
じゃあ、エスカレーター降りてすぐのとこにレジが!!
すでに受付の人がいらっしゃいませ状態でスタンバイしているのですが、ウォン持ってない!
って思ったら、今日のレートみたいな表示が。
もしや・・?と思って日本円使えるか聞いたら、使えると!
820えんでした。
(おつりの小銭が無いみたいです!
きっちり820円たまたま財布に入ってた!)
あかい!からい!けど甘い!
うまーい!
コチュジャンっておいしい!
細い麺と絡んでうまし!
そいで、付け合わせのスープ?
タレ?
味見すると、だしポン酢みたいな味。
用途がわからないまま、結局ちょびちょびすすりながら食べました。
からさが引くので助かります。
そんなこんなしてたら、出発時間。
この旅の最初の難関!
深夜のタクシー!
いちおう女の一人旅。
危険なことは重々承知。
でも空港カウンターで手配してくれることと、チェンマイの治安の良さを信じて。
到着口でたら、すぐにカウンターあったのですが、事前に調べていたカウンターと違うため、人気のない国内線の方へ歩き出す。
何にもない。
しゃあない、戻ろう!
と思ったら、
タクシー乗るんか?
と空港職員。
はい。と言うとどこ?
ときかれたので、
ゲストハウス近くのチェンマイオーキッドホテルを告げると、
こっちで待てと。
ラブラブ外人夫妻と、ぼっちの私。
内心 どうしようー 流しのタクシーなんて怖い!
と思ってたら、来たのは赤いトラック。
ソンテウ!!
やったぁ、と思いました。
タクシーで連れ去られる事はあっても、ソンテウは乗り合いですからタクシーより安全だと思ってたので。
ただ、値段交渉。
100バーツ要求され、
絶対ボラれてる!と思って、
下げてくださいとゆうてみたのですが、夜やしーみたいな事ゆわれ、
ここで足逃してもなぁと。
しかもタクシー乗るよりは安いと思って。乗ってしまいました。
そんなこんなで無事にゲストハウスに到着。
チェンマイの日々が始まります。