web-dev-qa-db-ja.com

カスタムコメントメタによるコメントのクエリと並べ替え

私は自分が取り組んでいるワードプレスサイトに投稿やコメントのための基本的な「お気に入り/おすすめ」機能を追加しました。

カスタムのコメントメタフィールド(update_comment_meta)に、「いいね」したコメントの総数を格納しています。それでは、人気のあるコメントを表示するために、このカスタムメタキーとそれに対応する値に基づいてコメントをクエリして並べ替えます。

理想的にはWP_Queryに似た "meta_key"や "order_by = meta_value_num"のようなパラメータを使用できるようにしたいのですが、コメントクエリはそれらをサポートしていないようです。

データベースに対して独自のクエリを使用する必要がありますか?もしそうなら、誰かが私にこれにどのように近づくかについての最初のプッシュを与えることができますか?

3
ximi

残念ながら、コメントを問い合わせるための適切なWordPress機能ではサポートされていません。これは主に(まだ)十分な人数(または誰か)がまだそれを要求していないためです。

この問題を理解しやすくするために、ここでいくつかのコアファイルを強調表示します。


  • 最初に comments-template.phpcomment_template関数です。それからそれらをWP_Queryオブジェクトに追加します。

    • 882行目を参照
    • クエリが発生する前にそれを傍受したり、変更したりするためのフィルタやアクションはありません。

  • 次は comments.phpget_comments関数ですが、今回はカスタムのサポートは見つかりません。並べ替え、例えば。メタソート.

    • 262行目を参照
    • array_intersectは一致のみを検索します。それが表示されている値の配列に含まれていない場合は、有効な順序とは見なされません。

コメントテンプレート関数にはフィルタが1つありますが、それはcomments_arrayという名前のコメントの配列全体を渡します(892行目でリンクされている最初のファイルにそのフックが表示されます)。

取得したコメントの配列をループ処理して、メタデータに基づいてソートされた新しい配列を構築することができます(ただし、可能な限り効率的にしたい場合は、メタデータを取得するためにカスタムクエリが必要になります)。 。

必要に応じて、配列ジャグリングの例を後で追加できます。

1
t31os