独自テーブルのデータから、動的に投稿を作成する方法について
-
こんにちは。WordPressを使って店舗検索サイトを作ろうとしています。
Excelに収集してある4万店のデータを使って、WordPressで表示したいのですが、
テンプレートの使用法とURL生成方法がわからずに困っています。考えている具体的な流れとしては、
1 WordPressと同じDB内に「wp_store」というテーブルを追加し、
4万店分のレコードをインポート。(各レコードは、ユニークなidをもっています。)2 store.php(category-2.phpとかpage-store.phpとか何でも平気です)を作り、
その中で、指定したidに応じて、$wpdbを使って、店舗名,電話番号,住所
といったデータをDBから取得し、テンプレートに成型して表示できるようにする3 http://example.com/store/999 か http://example.com/store/id/999
というURLで表示できるようにするといった感じです。
1まではできたのですが、2以降のやり方がさっぱりわからずに苦戦しています。
教えていだだければ幸いです。
-
jan55さんが聞きたいことをすべてここで解決するのは難しいと思います。
失礼かもしれませんが、率直に申し上げて、やろうとすることに対して、
知識やスキルが相当不足しているためです。そもそも、4万店のデータの店舗検索サイトをなぜ「WordPress」で
作るのですか?
仮にWordPressでやるとしても、なぜ「wp_store」のようなwordpressの
外部にテーブルを設けるのですか?
4万店のデータをどうやって更新するつもりですか?などなど、手をつける前に、最低限考えなければならないことがまったく
考えられてないように(文面からは)伺えます。もう一度、0から考え直した方が良いのではないですか?
aimaimさん、ご指摘ありがとうございます。
確かに私自身の知識・スキル共に不足しているのは否めません。
4万店分の店舗検索サイトについては、以前PHPで構築していましたが、フレームワークもCMSも一切使わずに生のPHPで書いていたので、今回きちんと再構築しようと思ったのです。WordPressを使おうと思った理由としては、テンプレート機能が非常に優れていることと、日々更新するブログのようなものを併設しようとしたからです。
>>>仮にWordPressでやるとしても、なぜ「wp_store」のようなwordpressの
>>>外部にテーブルを設けるのですか?
wp_storeテーブルは、WordPressと同じDB内に作ってあるので、内部だと思うのですが、私の認識がそもそも間違っているのでしょうか?>>>4万店のデータをどうやって更新するつもりですか?
これについては、以前構築していたときも悩みの種だったのですが、そのときは認証をかけた非公開の更新専用プログラムを作って、そこで更新していました。WordPressで再構築する際も、そういったページを一つ設けたいと思っています。今回の質問の意図としては、以前使っていた検索フォームやアンカーテキストからオリジナルのPHPファイルに飛ばしてそこで処理というプログラムがWPでは動作せず、どういったファイル遷移を行えば、WPのテンプレートでの表示を実現できるのかをお尋ねしたかったのです。そもそもWordPressの基本的な制限やルールについて、私の勉強が足りないのかと思います。
ご迷惑おかけいたしますが、どんな方法や説明をご指導頂いても、何とか理解して解決するという意気込みはあるつもりですので、教えて頂ければありがたいです。
可能かどうかはわかりませんが、少々考え方を変えて、元の店舗データをWordPress形式のXMLデータに変換かけてから読み込むとか、SQLを直接たたいて投稿データとして登録するとか、別のアプローチを取ってみるのはいかがでしょうか?
3 http://example.com/store/999 か http://example.com/store/id/999 というURLで表示できるようにする
これを実現しようとするには、外部データ(ここでいうのはDBが違うとかではなく、WordPressのテーブル外のデータ)とWordPressのパーマリンクを紐付けしなくてはなりませんが、最初から投稿データとしてインポートできればWordPressの管理データになるので楽じゃないかということです。
うまくいけば店舗データにエリアのタグをつけるとか、カテゴリをつけるとかも最初からできるかも?
ざっくりと実現方法の概要だけ難易度順に
方法1
投稿、もしくは、storeというカスタム投稿タイプに4万件の記事をインサート。カスタムフィールド(postmeta)にwp_storeのidを保存して、記事の表示時にそのデータを取得して表示テンプレートは、カスタム投稿タイプ用のテンプレートを利用
方法2
storeというURLのページを作る。
initフックで、$_SERVER[‘REQUEST_URI’]からstore以下のid部分を削除&グローバル変数 $store_idに格納。WordPressは、storeのページと判断し表示するので、表示時に$store_idから店舗のデータを取得し表示。テンプレートは、ページのテンプレートもしくは、専用のテンプレートを適用しても可
方法3
WordPressが受け付けられるパラメータをフックし、独自のパラメータ(store)などを追加。
storeパラメータについてのリライトルールを追加。
DBへのクエリーをフックして、該当する店舗のデータを取得。
テンプレートの選択にフックして適用されるテンプレートをindex.phpから変更あと、4万件のデータであることを考えると、store/id/*****での表示だけでなく、なんらかのカテゴライズしたリスト表示であったり、検索であったりという部分が必要なのではないでしょうか。
実装コストなどの面から考えても、shokun0803さんの案(ここでは方法1に近いもの)などがオススメではあります。やり方次第だと思いますが、逆に4万件のデータの方のシステムを組んでおいて、そこにWordPressを(ブログの部分だけ?)はめ込んだ方が楽だと思います。あまり複雑なことをすると、将来的にWordPressのバージョンアップで対応出来なくなったり、例えばデータベースもWordPress側の変更でデータを失ったりする可能性がないとは言い切れません。
ですので、店舗検索システムを構築し、3)のようなURLで表示出来るようにしておいてから、それぞれのページでwpdbを呼び出して記事を表示する、もしくはフレーム等を使ってwpの記事をはめ込むような形式にしたほうが、最終的にハッピーかな、と私は思います。
少なくとも、標準で用意されているAPIやDB Structureを改変すると、バージョン管理でつまづく訳で、継続的にデータを扱うのであれば避けるべきかな、と考えます。
検索のPHPがすでにできあがっているのならWp-config.phpをリクエストすればwordpressの基本機能は使えるようになるかと思います。テーマを使うならdefine(’WP_USE_THEMES’, true); も必要だったと思います。
パーマリンクのことも考えるとjim912さんの方法1のように、インポートする際に投稿データに整形するのが早い気もします。
検索システム事態が小規模で簡単に改造できるというのならシステムの方をプラグイン化するなりfunctions.phpに作成するという手もありますね。
皆様。ご回答、そして様々な方法のご提案ありがとうございます!
>>shokun0803さん
店舗のデータを投稿データとして扱うというのは思いつきませんでした。
確かにカテゴリやタグを利用できるとすれば色々便利そうですね!
WordPressからのエクスポートファイルを見て、大体の形式はわかったので、
試しに一部のデータを変換してインポートしてみます。>>jim912さん
カスタム投稿タイプを試してみたのですが、パーマリンク設定がうまく働きません。
postnameを使わずに(日本語は避けたいので)、idをキーにしたURLを生成することは可能なのでしょうか?方法2について、initフックの処理で正規表現を用いて、
storeというページ(store.phpかstoreフォルダ内index.php?)を認識させるという意味でしょうか?
これができればURLの問題は解決しそうですね。挑戦してみます。最後の方法については、gogowebさんからもプラグイン化の提案があったので、
フックについて勉強してみます。また、確かにデータへの誘導をわかりやすくするのには苦心しており、
都道府県選択や、ジャンル別の一覧を作成しようかと考えています。
その際にareaやjanreなどの値を指定してDBからデータ取得する必要があるのですが、
仮に両方を指定して検索した場合に、?area=tokyo&janre=15 というクエリ文字列を元に
area/tokyo/janre/15 といったURLとして表示することは可能なのでしょうか?>>V.J.Catkickさん
なるほど。同じドメインでWordPressと検索システムを共存させるということですね。
現在は、ドメイン直下にwp-content,wp-admin,index.phpといったファイルを置いていますが、
wpなどのフォルダに入れてその中でWordPressを運用すれば、通常のphpファイルも使えるんですかね。>>gogowebさん
同じくWordPressの使用を限定する方法ですね。
外部からWordPressの関数やテーマを使う前の記述ですが、
wp-config.phpを呼ぶ場合とwp-load.phpを呼ぶ場合の違いってあるんでしょうか?結論から言うと、WordPress で作るのはやめたほうがいいです。
そもそも、なぜ WordPress にしようと思ったのですか?もし、私がやるとすれば(大雑把で、たぶんご批判もあると思いますが)、
1) 今のシステムを強化する。
2) PHP フレームワークで作り直す。
3) Drupal で作り直す。
4) WordPress の Plugin pods を使う。
5) wp_store にデータを保存し、自前の更新処理を追加する。
6) 今のデータを post,category,customfield に変換してから取り込む。
の順番にします。4万件のデータを扱うとすると、性能も考慮しなければなりません。
http://dev.podscms.org/2010/10/15/pods-data-storage-vs-cpt-custom-fields-mysql-testing/
pods の性能 ≒ wp_store の性能でしょう。こんにちは
目的が、店舗検索サイトを構築する事か、ワードプレスの使い手として腕を上げたいのかによって違うと思いますが、
店舗検索サイトを構築する目的なら、出来るだけカスタマイズしないで実現したほうが、サイト運営にも集中できるので、shokun0803さんの指摘のように、1データ 1エントリで対応させれば一番自然だと思います。
いくつかのフィールドを持ちたい場合は、カスタムフィールドが使えます。このような作業で、標準の機能で問題があるときに、カスタマイズを考える。
….という事が大事だと最近わかりました
PHPやhtmlの生半可な知識があると、得意分野の技でちょいちょいと出来たりするカスタマイズがたくさんあるのですが、使い続けていると、そういう機能ワードプレスに付いてたんだー、というのがいっぱい出てきます 汗
技術的なことに興味があるなら
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class
等を読んで、具体的にどんな作業で、期待通りの結果を得られないのかを書いたほうが、的確な回答を得られる近道かもしれないです。>>pluto1234さん
Drupalについては名前だけ知っていましたが、調べてみて興味をもちました。
私の作るサイトには、こういったものの方が合っているのかもしれませんが、今回はWordPressでやると決めていますので、次に作るサイトで使いたいと思います。
プラグインのPods CMSというのは初めて知りましたが、ちょっと試験的に使ってみます。>>nobitaさん
ご指摘されてみて、自分でもよく考えてみたのですが、サイトの再構築自体よりもWordPressを使いこなせるようになるという目的の方が大きい気がします。
また、できるだけカスタマイズしない方がいいというお話も納得しました。
私自身がまだWordPressの機能を一部しか使いこなせていなので、とりあえず中途半端にPHPを使うことは一切やめて、WordPressだけでやってみようかと思います。皆さん、色々な方法を考えていただき、本当にありがとうございました。
私の勉強不足のために、せっかくいい方法をたくさん教えて頂いてもどれが一番いいのか、どれを使うべきなのかを判断することが難しく、ご迷惑をおかけしました。私自身の勉強のためでもありますので、ご提案いただいた手法については全て試してみるつもりです。プラグインも作る勉強を始めます。
まず今回の店舗検索サイトについては、shokun0803さんがご指摘頂いた方法で再構築してみたいと思います。URL部分やカスタムフィールドについては、できる限り勉強して自分でカスタマイズします。
こちらのルールも空気も全くわかっていない初心者ゆえに、正直、場を乱してしまっているのかなーとも感じていますので、もうここで質問することはしません。自力で解決できるように頑張ります。もし皆様に対して非礼があったならばお詫びいたします。
本当にありがとうございました。
- トピック「独自テーブルのデータから、動的に投稿を作成する方法について」には新たに返信することはできません。