2016-11-18 11 views
1

私はVersion 2.0-beta15を使用していますが、WP_REST_Posts_Controllerを継承するカスタム投稿タイプを使用していますが、acfフィールドに基づいて日付を照会する必要があります。 Yikes!WP-API特定の日付の後に投稿を取得する

エンドポイントPARAMS

/wp-json/wp/v2/almanac_entry?per_page=3&filter[orderby]=acf_almanac_date&after=2016-12-23T00:00:00&filter[date_query[column]]=acf_almanac_date

応答

応答は三つの項目を返す2つだけが記載されている日付の後にある2つのことが、第三の前であるべきですリストされた日付。

  1. 2016-12-31T00:00:00
  2. 2016-12-24T00:00:00
  3. 2016-12-17T00:00:00以下acf_almanac_dateフィールドの三の項目の値であります(この日付は、日付の前にある2016-12-23T00:00:00と戻ってきたはずです)

コード

アクションが登録されているような:

add_action('init', 'register_custom_post_types'); 
function register_custom_post_types() { 
    global $wp_post_types; 

    $post_type_name = 'almanac_entry'; 
    if(isset($wp_post_types[ $post_type_name ])) { 
     $wp_post_types[$post_type_name]->show_in_rest = true; 
     $wp_post_types[$post_type_name]->rest_base = $post_type_name; 
     $wp_post_types[$post_type_name]->rest_controller_class = 'WP_REST_Posts_Controller'; 
    } 
} 

add_action('rest_api_init', 'wp_rest_add_custom_fields'); 
function wp_rest_add_custom_fields() { 
    register_rest_field('almanac_entry', 'acf_almanac_date', array (
    'get_callback' => function($object, $field_name, $request) { 
     return get_post_meta($object[ 'id' ], 'almanac_date', true) . "T00:00:00"; 
    }, 
    'update_callback' => null, 
    'schema'   => null, 
)); 
} 

ご協力いただきまして誠にありがとうございます。


黙示録1

おそらく、PARAM filter[date_query[column]]=acf_almanac_datewp_rest_add_custom_fields機能に動的に追加されたフィールドacf_almanac_date用WP-APIのクエリを持っている、と私に起こりました。

多分WP_REST_Posts_Controllerを拡張してprepare_items_query関数をオーバーライドする必要がありますか?真の場合、どうすればACFフィールドacf_almanac_dateに関連付けることができますか?オイベイ!

答えて

1

WordPress REST APIでは、ポストメタ値をプライベートと見なしているので、ボックス外のメタ値によるクエリは許可されません。ポストコントローラへのクエリパラメータを登録

  1. :ポストメタ値でクエリを有効にするには、する必要があります。
  2. WP_Queryに渡されたクエリ引数に要求引数を変換します。

ここでは、ワードプレス4.7のために動作するコードのビットです:助け、ダニエルため

// Set the post type to modify. 
$post_type = 'almanac_entry'; 

/** 
* Register `almanac_date_before` and `almanac_date_after` 
* as collection query params. 
* 
* Also support ordering by the `almanac_date` meta value. 
*/ 
add_filter("rest_{$post_type}_collection_params", function($params){ 
    $params['almanac_date_before'] = array(
     'description'  => __('Limit response to posts published before a given ISO8601 compliant date.'), 
     'type'    => 'string', 
     'format'    => 'date-time', 
    ); 
    $params['almanac_date_after'] = array(
     'description'  => __('Limit response to posts published after a given ISO8601 compliant date.'), 
     'type'    => 'string', 
     'format'    => 'date-time', 
    ); 
    $params['orderby']['enum'][] = 'almanac_date'; 
    return $params; 
}); 

/** 
* Transform almanac_date_before` and `almanac_date_after` into a meta query. 
*/ 
add_filter("rest_{$post_type}_query", function($query_args, $request){ 
    if (isset($request['almanac_date_before'])) { 
     if (! is_array($query_args['meta_query'])) { 
      $query_args['meta_query'] = array(); 
     } 
     // We only want the 2016-11-23 from 2016-11-23T00:00:00 
     $bits = explode('T', $request['almanac_date_before']); 
     $query_args['meta_query'][] = array(
      'key'  => 'almanac_date', 
      'value' => $bits[0], 
      'compare' => '<=', 
      'type'  => 'DATE', 
     ); 
    } 
    if (isset($request['almanac_date_after'])) { 
     if (! is_array($query_args['meta_query'])) { 
      $query_args['meta_query'] = array(); 
     } 
     // We only want the 2016-11-23 from 2016-11-23T00:00:00 
     $bits = explode('T', $request['almanac_date_after']); 
     $query_args['meta_query'][] = array(
      'key'  => 'almanac_date', 
      'value' => $bits[0], 
      'compare' => '>=', 
      'type'  => 'DATE', 
     ); 
    } 
    return $query_args; 
}, 10, 2); 
+0

感謝。クイック質問。 almanac_dateが「2016-12-31」、「2016-12-24」、「2016-12-17」、「2016-12-10」、「2016-12-03」、および'/ wp-json/wp/v2/almanac_entry?almanac_date_after = 2016-12-20T00:00:00'のエンドポイントを押すと、' 2016-12-31'、 '2016-12-24'しかし、私はすべて5を得る。私はあなたがWP 4.7を思い付いたことを知っている。たぶん私はそれを実行していない(私は見なければならないだろう)、またはおそらく私はparamが足りない? :( –

+0

バージョン4.6.1を実行しています。更新する必要があるかもしれません。あなたが明示的に4を呼び出すので、これが問題です。7、それはWP REST API Version 2.0-beta15プラグインを使用しているわけではありません。 –

+1

WordPress 4.7は12月6日にリリースされます。 Beta Testerプラグインを使用して、今すぐリリース候補に更新することができます。https://wordpress.org/plugins/wordpress-beta-tester/ –

関連する問題