GeoDirectory

WordPress でディレクトリサイトを構築する際の課題:カスタム投稿タイプと Advanced Custom Fields(ACF)

オンラインディレクトリとは何か、そして2023年においてなぜ重要なのか

ディレクトリウェブサイトとは、特定の業界やニッチ分野における企業・サービス・商品に関する情報を、包括的かつ整理された形で提供するオンラインプラットフォームです。

便利で一元化された情報源をユーザーに提供することで、ディレクトリウェブサイトはユーザーが自分のニーズに合った商品・サービス・企業を探す際に、十分な情報に基づいた判断を下せるよう支援します。

消費者がインターネットに頼って解決策を探し情報を収集するデジタル時代において、ディレクトリウェブサイトは企業とターゲットオーディエンスをつなぐ上で重要な役割を担っています。

これらのウェブサイトは、ユーザーがさまざまな企業のサービスを発見・比較しやすくするだけでなく、企業のオンライン露出を高め、リードを獲得し、信頼性を向上させる助けにもなります。

オンライン空間での競争が激化する中、他との差別化を図り、ユーザーと企業の双方に価値を提供するためには、デザイン性が高くユーザーフレンドリーなディレクトリウェブサイトを持つことが不可欠です。

WordPressのカスタム投稿タイプとAdvanced Custom Fieldsをディレクトリウェブサイト構築に活用する

ディレクトリウェブサイトを構築する最善の方法についてWordPress関連のFacebookグループやSubredditで尋ねると、専用プラグインを避けてCPT UI(カスタム投稿タイプ)とACF(Advanced Custom Fields)で構築するよう、大多数が答えるでしょう。

これらは何百万人ものユーザーに使われている非常に優秀なプラグインです。しかし、WordPressのカスタム投稿タイプとAdvanced Custom Fieldsを使ってディレクトリウェブサイトを開発しようとすると、そのプロセスは困難で frustrating なものになりがちで、多くの隠れたコストが発生することもあります。

これらのツールは人気があり広く使われていますが、高度な機能を実現するには開発者にとって急な学習曲線を要することが多く、パフォーマンスが最適化されなかったり選択肢が限られたりする結果につながることがあります。

その理由をご説明しましょう。

カスタム投稿タイプとACFを使ってディレクトリウェブサイトを構築する際に、希望する機能を実現するうえでの15の課題:

  1. 支払いとリスティングの有効期限を含む、リスティングの追加・編集ができるフロントエンド送信フォームを作成する。
GeoDirectoryにはフロントエンドのリスティング追加フォームが標準搭載されています

一方、ACFを使えば簡単に フロントエンドにフォームを作成する ことはできますが、コンテンツの追加・編集、支払いの受付、無料リスティングと有料リスティングの追加機能の提供、サブスクリプション(定期支払い)への対応などを実現するのははるかに難しくなります。

DIYソリューションを好むハードコアな開発者であれば、すべての追加機能をカスタムコードで実装するしか方法はありません。

これは数週間の作業になり(同様のタスクに初めて取り組む場合は数か月かかることもあります)。

そうでなければ、有料プラグインを追加することで実現できます。

たとえば、 Frontend Adminプラグイン のプロバージョンを使えば、フロントエンドのユーザー登録、有料リスティングの送信、および編集が可能になります。

シングルサイトの場合、このプラグインで予算に年間$90が加算されます。

  1. プレミアムリスティングと無料リスティングの差別化
GeoDirectoryのおすすめリスティングバッジと無料リスティングの比較

有料リスティングと無料リスティングの両方を提供したい場合、両者を差別化し、有料オプションに付加価値を加える必要があります。

最善の方法は、リスティングタイプごとに「リスティング送信」フォームを作成し、プレミアムリスティングには追加のカスタムフィールドという形で追加機能を設けることです。

たとえば、無料リスティングにはリスティング名、住所、電話番号、写真1枚のみを設定できます。

一方、プレミアムリスティングにはウェブアドレス、SNSアカウント、複数の写真、長めのテキスト説明、お問い合わせフォームなど、より詳細な情報を含めることができます。

さらに、プレミアムリスティングは視覚的に区別できるようにする必要があります。たとえば「FEATURED」バッジを表示したり、異なるレイアウトを使用したりすることが考えられます。

これは特別に難しいことではありませんが、それでも比較的時間がかかります。

それほど簡単ではないのは、無料リスティングと比べてプレミアムリスティングに高い視認性を与えることです。

たとえば、プレミアムリスティングをカテゴリーアーカイブページの常に上位に表示させるといったことです。

そのためには、WPクエリやSQLを使いこなす必要があります。

  1. リスティングサブスクリプション、定期支払いの失敗、およびリスティングの有効期限の管理
GeoDirectoryのリスティング料金と支払い

リスティングオーナーが再度支払いをしてリスティングを更新しない場合はどうすればよいでしょうか?

または、 定期支払いによるサブスクリプションを設定した場合で、リスティングオーナーがサブスクリプションをキャンセルした場合、あるいは支払い方法が拒否された場合はどうなるでしょうか?

支払いなしにリスティングがアクティブのままになったり、プレミアムリスティングの特典を受け続けたりすることは、絶対に避けたいですよね?

リスティングをダウングレードするか、有効期限切れにして非公開ステータスに変更する仕組みを構築する必要があります。

これらすべてにはカスタムコードが必要であり、そのようなものを開発するには、決済ゲートウェイのAPI、特にIPN(即時支払い通知)に関する十分な知識が必要です。

また、CRONジョブの設定方法、投稿ステータスの変更方法、そして追加データをできる限り失わずにプレミアムリスティングを無料リスティングに切り替える方法も知っておく必要があります。

  1. 複数のピンを持つマップの開発。
数千件のリスティングを表示するGeoDirectoryの高速マップ

Advanced Custom Fieldsと少量のJavaScriptを使ってGoogle Map上に場所をプロットするのは、比較的簡単です。

最初のステップは各リスティングの住所をジオコーディングすることです。このリストの6番目のポイントで詳しく説明します。

難しいのは、多数の場所をプロットすることです。特に、マップマーカーをクリックしたときにリスティングのタイトル以外の情報もマップに渡して表示しようとする場合はなおさらです。

数百件を超えるリスティングをマップに表示しようとすると(サーバーが高性能でない場合はそれ以下でも)、マップの読み込みが非常に遅くなったり、フリーズしたりすることがあります。

唯一の解決策は、ロケーションと情報を非同期(AJAX)で読み込むことです。

それを実現するのは、いくつかのマーカーを配置した地図を作るよりもはるかに難しく、熟練した開発者でも達成するのにかなりの時間がかかります。

リスティング数が増えるほど、求められるソリューションはより複雑になります。

まず、ブラウザのAJAXレスポンスの最大サイズに達し、次に個々のリスティングの詳細をAJAXで読み込む必要が生じ、さらにクラスタリング、そして数百万件のリスティングを表示できるサーバーサイドクラスタリングまで必要になります。

大量のリスティングに対して クラスター内のマップマーカー を集約するシステムの構築は、膨大な数のリスティングを扱う際に不可欠となります。

サイトが注目を集めたことでライブサイトがこれらの限界に達しても、それは望ましくありませんし、一夜にして修正できるものでもありません

この種のシステムを構築するには、また別の大きな課題がともないます。

それを実現するには、豊富なコーディング経験が必要です。

  1. リスティングへのダイナミックなお問い合わせフォームの統合s
各リスティング向けのGeoDirectory コンタクトフォーム

各リスティングに固有のコンタクトフォームを統合し、サイト訪問者がビジネスオーナーに直接連絡できるようにすることは、いくつかの課題をもたらす可能性があります。

動的フォーム生成の複雑さ、データ管理、カスタマイズの一貫性、スパム対策、互換性の問題、パフォーマンスへの懸念、そして継続的なメンテナンスとアップデートが挙げられます。

こうした困難はあるものの、この機能を実装することで、サイトの機能性が大幅に向上し、訪問者とビジネスオーナーとのコミュニケーションが改善されます。

この機能をすぐに提供できるプラグインは存在しません。

カスタム投稿タイプとAdvanced Custom Fieldsを使って構築されたWordPressディレクトリにこのような機能を実装するには、大規模なカスタムコーディングが必要です。

  1. リスティングのジオコーディングと近隣検索
GeoDirectoryでは近隣検索が簡単に行えるうえ、実際の距離まで表示されます

作成するには 近接検索 機能を利用するには、まず各リスティングのアドレスをジオコードする必要があります。

ジオコーディングとは、住所から経度・緯度の座標を取得することです。

これはGoogle Maps ジオコーディングAPIを通じて行うことができます。オンラインにチュートリアルが多数あり、特に複雑な作業ではありませんが、時間がかかります。

開始に役立つプラグインがありますが、4年以上更新されていません: https://wordpress.org/plugins/address-geocoder/

すべてのリスティングのジオコーディングが完了すれば、近接検索に必要なデータが揃います。ただし、その機能を実現するには、WP-Query/SQLの深い知識とカスタムコードが必要です。

もう一つの選択肢として、FacetWPというプレミアム検索プラグインを使う方法があります。1〜3サイトで年間$99からご利用いただけます。

  1. ユーザーのジオロケーションと近くのリスティングの表示
GeoLocationを使用してGeoDirectoryで現在地付近のリスティングを検索

これは自動的に行うことができます(信頼性の高いIPジオロケーションデータが必要です)。

または、Google GeoLocation APIを使用して、ユーザーにブラウザの位置情報の共有を求める方法もあります。

最初の方法はよりユーザーフレンドリーですが、精度は低めです。IPアドレスが100%正確な住所を返すことはほとんどありません。

2番目の方法はユーザーの位置情報をより高い精度で返しますが、ユーザーの許可がある場合にのみ機能します。

どちらの方法も、これらすべてを自動化するプラグインが存在しないため、カスタムコーディングが必要です。

さらに、ユーザーの位置情報を取得することは、あくまでスタート地点にすぎません。

データベースにクエリを実行し、ユーザーの位置に近いリスティングを返す処理も必要です。

  1. ビジネスオーナーによるリスティング申請の自動化
GeoDirectory リスティング申請システム

ビジネスオーナーとつながり、プレミアムリスティングへの課金を促す効果的な方法の一つは、ビジネスを無料リスティングとしてディレクトリに追加し、オーナー自身が申請できるようにすることです。

その後、直接連絡を取り、場合によっては無料トライアルとともに、その機会についてお知らせすることができます。

あるいは、もう一つの選択肢として、通常最も良い結果をもたらすのは、ビジネスオーナー自身があなたのディレクトリで自分のリスティングを発見するというケースです。

こうすることで、あなたがウェブサイトへの集客力を持っていることをその場で示せるため、すぐに相手にとって10倍魅力的な存在になれます。

2つ目の選択肢を実現するには、 リスティング申請システム を導入する必要があります。

リスティング申請システムとは、ディレクトリウェブサイトに実装される機能で、ビジネスオーナーがプラットフォーム上の自社ビジネスリスティングのオーナーシップを取得できるようにするものです。

このシステムは、ディレクトリウェブサイトに表示される情報が正確かつ最新であり、権限を持つビジネスオーナーまたはその代表者によって管理されることを保証するために設計されています。

リスティングを申請するには、ビジネスオーナーはディレクトリウェブサイトが定める本人確認プロセスに従う必要があり、営業許可証・税務識別番号・公共料金の請求書など、本人またはビジネスオーナーであることの証明書類の提出が求められる場合があります。

申請が承認されると、ビジネスオーナーはリスティングの管理権限を取得し、情報の更新、写真の追加、レビューへの返信、またはディレクトリウェブサイトが提供するプレミアム機能を使ったビジネスのプロモーションが行えるようになります。

リスティングが数件程度の小規模なディレクトリであれば、お問い合わせフォームと手動プロセスでこれを設定することができます。

自動化を取り入れたい場合、この機能には多くのカスタムコーディングが必要になります。特に、申請プロセスの一環としてビジネスオーナーにリスティングのアップグレード料金を支払ってもらいたい場合はなおさらです。

CPT と ACF で構築されたディレクトリに対して、この機能をすぐに提供できるプラグインは存在しません。

  1. 営業時間の表示と空き状況による検索フィルタリング
GeoDirectory ビジネス営業時間 – 現在営業中

Advanced Custom Fields プラグインを使用すると、各リスティングの営業時間に対してリピーターフィールドを作成できます。

時間の値を含むドロップダウンフィールドを作成し、PHP を使用して表示や計算に適した形式に整える必要があります。

分単位の時間指定が必要な場合は、数値フィールドを使用する必要があります。

「現在営業中」または「現在閉店中」での検索、特にタイムゾーンを考慮した計算が必要な場合は、カスタムクエリとコードによってのみ実現可能です。

もう一つの大きな課題は、リスティングの営業中/閉店中ステータスを乱すことなく、この情報をキャッシュすることです。

これをページ上でリアルタイムに「営業中/営業終了」の表示を切り替えるには、JavaScriptのスキルが必要です。

CPTとACFを使ったリスティングでこの機能を実現できる既製のプラグインが存在しないのは、言うまでもありません。

  1. 評価・レビューの追加と、高評価順でのリスティングの並び替え
GeoDirectory レビュー

コメントシステムを使ってカスタム投稿タイプに評価とレビューを追加するのは、比較的簡単です。

それを実現するための無料・有料プラグインが存在し、プラグインなしで達成する方法のチュートリアルも見つかるかもしれません。

人気順や高評価順でリスティングを並び替えるのは少し複雑で、カスタムコードとWP_Queryクラスの知識、場合によってはSQLの知識も必要になります。

また、作業を進めると、単純な高評価順の並び替えはランキング要素として不十分であり、より複雑なランキングクエリが必要だとすぐに気づくでしょう。

特に、カスタムデータベーステーブルの構築を選択した場合、フィールド数が多くなるにつれて、ACFがまったくスケールしないことにすぐ気づくでしょう。

ただし、この点については次のセクションで詳しく説明します。

  1. カスタムフィールドまたは場所によるリスティングの検索
GeoDirectoryのカスタムフィールドを使った高度な検索

ここが、このアプローチが大規模になると完全に破綻するポイントです。

wp_postmetaデータベーステーブル(カスタムフィールド)は、カスタムフィールドによる投稿のクエリには設計されていません。

複数のカスタムフィールド(2つ以上)でフィルタリングすると、クエリ時間が指数関数的に増加し、小規模なディレクトリでも2つ以上のカスタムフィールドによるフィルタリングに苦労することになります。

技術的な説明を求める方は、こちらの記事をお読みください: ACFのスケーラビリティの限界.

FacetWPのような優れた検索プラグインを使用していても、カスタムフィールドの数が少なく数百件程度のリスティングを扱う場合を除き、かなり早い段階で壁にぶつかるでしょう。

サーバーが高性能であるほど壁にぶつかるまでの時間は長くなりますが、最終的には必ずそこに到達します。

ACFデータをカスタムデータベーステーブルに保存するプラグイン(例:https://hookturn.io/downloads/acf-custom-database-tables/)もありますが、追加コストがかかり、新しいデータベーステーブルを検索するためのカスタムクエリを検索フォーム用に作成する必要があります。

  1. ビジネスオーナー向けの無料・有料トライアルの導入

オンボーディングを容易にするトライアルオプションを提供することは、ビジネスオーナーがディレクトリウェブサイトの機能とメリットを探索するよう促す効果的な方法です。

プレミアム機能への無料または割引アクセスを提供することで、ビジネスオーナーは即座に金銭的なコミットメントをすることなく、プラットフォームの価値を体験できます。

このアプローチは参入障壁を下げ、ディレクトリウェブサイトと潜在顧客の間の信頼関係を築くのに役立ちます。

ビジネスオーナーがプラットフォームに慣れ親しみ、オンラインでの露出拡大、リード獲得、評判向上といった可能性を実感するにつれ、トライアルユーザーから有料顧客へと転換する可能性が高まります。

とはいえ、無料または 有料トライアル の提供はそれほど簡単ではないかもしれません。ゼロからの開発を選択した場合、プロジェクトと予算に数日、場合によっては数週間のカスタムコーディングが追加されることになります。

  1. イベントの追加と日付による検索
GeoDirectory Events Search by Dates

イベントは通常のリスティングよりも多くのステータスを持つリスティングであり、開始日と終了日に依存します。イベントは「過去」「近日開催」「開催中」のいずれかになります。

さらに別のカスタム投稿タイプと、より複雑な検索クエリが必要になります。

ウェブサイトに完全な イベントカレンダー を追加するプラグインはいくつかありますが、そのスタイルはCPT/ACFの組み合わせで構築したリスティングとは全く異なります。

これもCPT/ACFで構築することを選択した場合、開発時間は単純に倍になります。

  1. リスティング比較機能の作成
GeoDirectory Compare Listings

ディレクトリウェブサイトでユーザーが リスティングを比較 できるようにするメリットは数多くあります。

比較機能を使うことで、ユーザーはさまざまなビジネスやサービスを簡単に並べて評価できるようになり、より情報に基づいた意思決定を行うことができます。

この機能により、ユーザーは価格、機能、評価、距離などの主な違いをすばやく把握し、自分のニーズや好みに合った最適な選択肢を選ぶことができます。

カスタム投稿タイプとAdvanced Custom Fieldsを使ってリスト比較機能を実装することは、難しく時間のかかる作業です。

その難しさは、選択されたリストをさまざまなカスタムフィールドや属性を考慮しながら動的に並べて比較するシステムを構築する必要があることに起因しています。

さらに、比較インターフェースはユーザーフレンドリーで視覚的に魅力的であり、さまざまな画面サイズやデバイスに対応したレスポンシブなデザインである必要があります。

リスト比較機能の実装に必要な時間は、リストの複雑さ、比較するカスタムフィールドの数、カスタム投稿タイプとAdvanced Custom Fieldsに関する開発者の習熟度など、いくつかの要因によって異なります。

ただし、スムーズで機能的なユーザー体験を実現するために、このプロセスに数週間の開発とテストを要することは珍しくありません。

  1. バケーションレンタル向け予約システムの追加
GeoDirectory Booking Marketplace Airbnb Clone

これはCPTとACFだけでは非常に複雑な作業となり、数か月にわたるカスタムコーディングが必要になるでしょう。

1つの物件の予約を受け付けられる無料プラグインはいくつかありますが、今回はそれぞれ異なるオーナーが所有する複数の物件の予約を受け付ける必要があります。

グローバルな日付検索、カスタムフィールド(プール、WiFi、駐車場)、人数に対応したマルチベンダー予約を可能にするプレミアムプラグインは見つかりませんでした。

GeoDirectoryは現在、完全な バケーションレンタル向け予約プラグインを提供する唯一のソリューションであり、ディレクトリ管理者が各予約に対するコミッションで収益を得られる完全なAirbnbクローンの構築が可能です。

まとめ

カスタム投稿タイプとAdvanced Custom Fieldsを使って本格的なビジネスディレクトリを構築することは確かに可能ですが、このアプローチでは必要なすべての機能を実装するために数か月、あるいは数年ものカスタムコーディングが必要になる場合があります。

代替手段として、ACF互換のプラグインを使用することで、開発の特定の側面を効率化できます。

ただし、このアプローチでは異なる開発者によるさまざまなプラグインをインストールする必要があり、その多くは無料ではないため、互換性の問題やコストの増加につながる可能性があります。

たとえば、以下を使用する場合:

すでに年間約300ドルに達しているのに、必要な機能のほんの一部しかカバーできていません。

より効率的でコスト効果の高い選択肢は、専用の WordPress ビジネスディレクトリプラグイン(GeoDirectory など)を使用することです。

このルートを選ぶことで、ディレクトリウェブサイト専用に設計された機能一式を活用できます。これらはすべて単一の開発者によって開発されています。

これらのプラグインは一般的に軽量で、パフォーマンスへの懸念を最小限に抑えながら、ディレクトリウェブサイト構築という目的に特化した、より一貫性の高い優れたアプリケーションを提供します。

GeoDirectory のようなソリューションを選ぶことで、時間とコストの両方を節約でき、カスタムコーディングや複数プラグインの管理にまつわる課題や複雑さを抱えることなく、強力でユーザーフレンドリーなディレクトリウェブサイトを作成できます。