icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【AIが勝手に投稿するブログ開発シリーズ】保存した記事取得を取得するプログラム(PDO使用)とWordPressへの組み込み

更新: 2024/09/21 2345文字

今回は、管理人が最近作っていたアプリケーション『AIが勝手に投稿するブログ』のシリーズで、『保存した記事取得を取得するプログラムとWordPressへの組み込み』を行っていきます。geminiというよりは、データベースから記事取ってくるとか、WordPressの固定ページで表示される、といった内容です。早速見ていきましょう

前回までの内容~geminiで生成した文章をデータベースに保存&自動実行

また現在運用している『AIが勝手に投稿するブログ』のリンクは以下の通りです。こちらは現在、管理人が全く手を加えずに、aiがブログを投稿してくれています

gemini生成&データベース保存した記事を取得するプログラム(dbConnectAndGetClass.php)

前回記事、ディレクトリで述べたところの『controllers/dbConnectAndGetClass.php』に当たるコードです。コンストラクタでself::getAutoPost(記事取得)して接続情報はすぐ空にしています。メソッドはgetAutoPost(記事取得),convCat(カテゴリをCSSクラスに変換),echoPagination(ページネーション出力)があります。ページネーションは10件以上で作ったんですけど、既にgeminiが10件以上の記事を生成していたため、判定の意味がありませんでした(笑)

あと、サーバー変数のREQUEST_URIで『urlにnav-autoblogスラッグが入っていた場合256件取る、そのほか3件』みたいなのも付けましたが、今のところはnav-autoblogページでしか運用していません。ただし、トップページで3件みたいなときは1メソッドで使いまわしができそうです。

基本的には PDOクラスに『LIMIT $postnum件、ORDER BY $id順』のようなSQLを渡しているだけなのでシンプルです。execute(実行)、rowCount(件数)、fetchAll(結果セットから取得)のような、PDOメソッドをメインに使っています。

WordPress固定ページで表示する方法

上記のファイルをrequireで読んで、new dbConnectAndGetClass()で実行すれば、記事が出てくるようになりました。しかしつけようとしているサイトSSFはWordpressで構築されています。ここではWordpress固定ページでこの一覧がでるように、組み込みを行ってみます。

まずは『asset(css・アイコン・js),controllers(記事取得や生成),prompts(プロンプト・システム指示),vendor(geminiライブラリ)』一式ファイルをサーバーに上げます。WPディレクトリにサイト用サブドメインをあてている関係で、そこに上げました(あんまりよくないかもしれません)。接頭辞でWPと区別がつくようにしています。

次に、スラッグ指定して固定ページ作りました。このスラッグはurl判定にも使います。

管理人のテーマでは、ヘッダーテンプレート内にstyleタグ入れて、追加CSSを出力するようにしているんですけど、ここに取ってきた記事表示用のCSSを出力。このCSSではカテゴリ色分けとかも定義しています。

たぶん一番のポイント。page-〇〇.phpで、スラッグ指定で読み込む固定ページテンプレート page.php内でis_pageで判定しても良いんですけど、完全に違う一列レイアウトになるので、この方法を選択。
ここでは$inst=new dbConnectAndGetClassのように書いてインスタンス化&実行、$inst->echoPagination()のように書いてメソッド実行しました。

そんな感じで、AIが勝手に投稿するブログが完成。管理人のことを変わり者とかたまに好き勝手書いていますが、まだ学習が十分じゃないということにしておきます(笑)

あとがき・まとめ

  • gemini生成文はデータベースに保存してしまえば、PDOクラスを使ってブログのように取り出せる
  • WordPress固定ページ組み込み時は、page-〇〇.phpで、スラッグ指定で読み込むテンプレートが使える
  • スラッグ指定で読み込むテンプレート上で、作ったクラスのメソッド実行する

まとめると、こんなところでしょうか。WPに組み込んだけど、テーブルなどは完全に独立しておりPDOクラスを使えるとなんとかなった印象でした。


【カテゴリ】- PHP
【タグ】- , ,

関連記事