WordPressで投稿のデータにカスタムフィールドを加えて取得する。(全文)
<?php $posts_join_keys = array(); $posts_join_prefix = 'tmp_join_table_name_'; add_filter('posts_join', 'posts_more_join' ); add_filter('posts_fields','posts_more_fields'); function posts_more_join( $join ) { global $posts_join_keys,$posts_join_prefix; foreach($posts_join_keys as $key => $k){ $alias = $posts_join_prefix.$k; $join .= sprintf(" INNER JOIN wp_postmeta as %s ON ( wp_posts.ID = %s.post_id AND %s.meta_key = '%s' )",$alias,$alias,$alias,$k); } return $join; } function posts_more_fields($fields){ global $posts_join_keys,$posts_join_prefix; foreach($posts_join_keys as $key => $k){ $alias = $posts_join_prefix.$k; $fields .= sprintf(',%s.meta_value as %s',$alias,$k); } return $fields; } $posts_join_keys[] = 'locate'; $posts_join_keys[] = 'description'; $args = array( 'posts_per_page' => -1, 'fields'=> 'wp_posts.ID,wp_posts.post_title', 'meta_query' => array(array( 'key' => 'locate', 'value' => '', 'compare' => '!=' )) ); $query = new WP_Query( $args ); $posts = $query->get_posts(); wp_reset_postdata(); $json = '{data:'.json_encode($query->get_posts()).'}'; ?>
上のプログラムの $posts_join_keysに取得したいカスタムフィールドの’meta_key’を追加(push)していけばその分取得できます。
$posts_join_keys[] = 'locate'; $posts_join_keys[] = 'description';
コメントを残す