3

詳細

Ok。そのため、投稿に Location というカスタム フィールドがあります。この場所は、LAT LNG 値にジオコーディングされます。

まったく同じことを行うユーザー用のカスタム フィールドもあります。ユーザーは、半径をマイルまたはキロメートルで定義することもできます。この半径内の投稿のみが表示されます。

投稿のメタデータ(lat long)を取得し、それをユーザーと比較することで、query_posts ループ内の投稿の緯度経度とユーザーの経度経度の間の距離を計算できます。

これをループ内で実行し、if ステートメントをラップすると、基本的に半径が表示ポストよりも小さい場合、半径内のポストのみが取得されます。

問題
5 の posts_per_page を追加し、ループする最初の 5 つの投稿が定義された半径内になく、0 件の投稿が表示されるとしましょう。最初の 3 つが半径内にない場合、2 つの投稿が取得されます。等々。

解決策が必要

1)明らかに、これを行う最善の方法は、クエリ内にあります。wp_query と query_posts を使用しても問題ありませんが、PHP 関数を実行してユーザーと投稿の間の距離を計算する方法が 100% わかりません。

2) if ステートメントが else 内で満たされない場合、query_posts post_per_page を 1 増やす方法はありますか?

結論

これについて何らかの洞察を持っている人には、事前に感謝します。十分な情報を提供していない場合はお知らせください。より明確に説明できるよう努めます。私はコードを投稿できましたが、見返りにコードを探していません。正しい方向へのポイントです。

乾杯!

4

3 に答える 3

2

これが私の最後のクエリです。私がそれをするのに必要なことを正確に行います。データベースにカスタムテーブルを作成して、投稿からのlatおよびlng情報を保存し、投稿メタテーブルに追加して、2に参加し、投稿からユーザーまでの距離を取得できるようにしました。どんな質問でも私に知らせてください:)

$querystr = '
            SELECT *,
            (((acos(sin(('.$userLat.'*pi()/180)) * sin((lat*pi()/180))+cos(('.$userLat.'*pi()/180)) * cos((lat*pi()/180)) * cos((('.$userLng.'- lng)*pi()/180))))*180/pi())*60*1.1515) as distance
            FROM wp_posts, tbl_post_lat_lng
            WHERE wp_posts.ID = tbl_post_lat_lng.post_id
            AND wp_posts.post_status = "publish"
            AND wp_posts.post_type = "post"
            AND distance <= '.$userRadius.'
            ORDER BY wp_posts.post_date DESC
            LIMIT 5
         ';
于 2012-09-13T01:58:10.490 に答える
0

返される投稿の数を指定せず、投稿が地理位置情報の要件に一致しない場合はループの繰り返しをスキップするだけで簡単ですか?

しかし、投稿が多いとパフォーマンスが低下する可能性があると思います...

これは、クエリ内でそれを行う方法のように見えます: Codex: Displaying Posts Using a Custom Select Query

于 2012-09-11T02:16:07.700 に答える