wordpressでget_posts()を使って投稿IDを取得する方法

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をきちんと編集する必要があります。