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';