Ajax通信でionicで作ったアプリケーションにオープンデータを投稿する際に投稿IDを決め打ちしてfor文でリストを作る方法では納得が行かなかったので、get_posts()で$argsで指定した条件に合う投稿IDをソートするようにしました。
functions.php
add_action('wp_ajax_tell_me', 'tell_me'); // ログイン状態のユーザーからのアクセスで動作する add_action('wp_ajax_nopriv_tell_me', 'tell_me'); // 非ログインのユーザーからのアクセスで動作する function tell_me() { $args = array( 'posts_per_page' => -1, 'category_name' => 'Uncategorized', 'author' => 'admin', 'post_status' => 'draft', 'title'=>'ToiletData' ); $keys = array('latitude','longitude'); $myposts = get_posts( $args ); $i=0; foreach ($myposts as $post) { setup_postdata( $post ); foreach ($keys as $key){ $data[$i][(string)$key] = get_post_meta( $post->ID , $key ,true); } $i++; } echo json_encode($data, JSON_UNESCAPED_UNICODE); ; die(); }
全件表示
‘posts_per_page’ に出力する投稿の数を指定できますがここに-1と書くと全件表示されます。
注意点
テンプレートタグ/get postsを開きデフォルトの使い方を見てみると、
$args = array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'post_status' => 'publish', 'suppress_filters' => true );
となっています。$argsに特に何も指定しなかった場合、上の条件でソートされてしまうので、自分の投稿と一致するように$argsをきちんと編集する必要があります。