web-dev-qa-db-ja.com

WP_Queryが投稿を取得した後に、投稿関連メタのカスタムテーブルをクエリするためのフック/アクション

投稿を受け取る前にWP_Queryを操作するためのフック(parse_query、pre_get_posts)があるようですが、 after のためのフックが見つからないようです - // WP_Queryオブジェクトが生成されます。 WP_Queryオブジェクトが生成された後に取得したい、プラグイン固有の事後関連付けメタデータ用のカスタムテーブルがあります。

4
Kevin

自分が何を達成しようとしているのか、そして今述べたように、関連データを取得する必要があることを述べていないので。カスタムテーブルをクエリする方法は2つあります。

  1. 投稿を反復処理しながら、投稿オブジェクトの投稿IDを使用してカスタムクエリを個別に実行する必要があります。
  2. メインのWordPressクエリの結合を変更して、WordPressがすでにそれぞれの投稿に関連付けられているカスタムテーブルからデータを取得するようにします。

以下の例は、最初の方法を示しています。

 <?php 
      function populate_posts_data( $posts, $query ) {
           global $wpdb;

           if ( !count( $posts ) ) 
               return $posts;  // posts array is empty send it back with thanks.

           while ( $posts as $post ) {
               // query to get custom post data from custom table
               $query = "SELECT * FROM {$wpdb->prefix}my_plugin_table WHERE post_id={$post->ID}";
               $results = $wpdb->get_results( $query );
           }
           return $posts;
       }
       add_filter( 'the_posts', 'populate_posts_data' );
 ?>

2番目の方法では、 posts_where、posts_join、posts_groupby 、および posts_orderby filtersを調べる必要があります。例として、@ scribuの 並べ替え可能なカスタム列の例 を見ることができます。

8