私はJetpack for Wordpressを使って私の イベント カスタム投稿タイプのJSON APIを作成しています。
https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100
ただし、このCPTには、 カスタムメタボックスおよびWordpress用フィールドによって生成されたポストメタフィールドもかなり含まれています 。これらのフィールドには、次のようなものがあります。
_ecmb_supporting_bands
_ecmb_tickets_avail
_ecmb_event_agelim
そしてデフォルトではこれらのフィールドはJSON APIによって返されません...私は以下のようなクエリを実行しようとしました:
https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key='_ecmb_supporting_bands'
またはメタキーを引用符なしで囲む:https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key=_ecmb_supporting_bands
残念ながらこれはうまくいきません。 JSONレスポンスでこれらのカスタムメタフィールドを返す方法を誰かが知っていますか?
によると - JetPack JSON APIドキュメント :
デフォルトでは、保護されていないキーである限り、すべてのメタデータキーがAPIで許可されています。 _で始まるメタデータキーはデフォルトで保護されています。ただし、保護されたメタデータキーは、各操作に応じてedit_post_meta(編集および表示に使用される)、add_post_metaおよびdelete_post_meta機能を使用してユーザーがアクセスおよび編集できます。キーが保護されている場合でも、特定のメタデータキーが任意のユーザーによってアクセスされるように特別にホワイトリストに登録できるようにするフィルタrest_api_allowed_public_metadataも追加しました。
だからrest_api_allowed_public_metadata
フィルタはあなたが探しているものです。
JetPackのソースコードをチェックすると、この部分が見つかります。
function is_metadata_public( $key ) {
if ( empty( $key ) )
return false;
// whitelist of post types that can be accessed
if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', array() ) ) )
return true;
return false;
}
ファイルclass.json-api-endpoints.php
内。
このrest_api_allowed_public_metadata
フィルタの実装方法についてはallow_bbpress_public_metadata()
関数 here をチェックすることもできます。
これはあなたの場合の同様の例です。
/**
* Whitelist protected meta keys
*
* @param array $allowed_meta_keys
* @return array $allowed_meta_keys
*/
function custom_rest_api_allowed_public_metadata( $allowed_meta_keys )
{
// only run for REST API requests
if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST )
return $allowed_meta_keys;
$allowed_meta_keys[] = '_ecmb_supporting_bands';
$allowed_meta_keys[] = '_ecmb_tickets_avail';
$allowed_meta_keys[] = '_ecmb_event_agelim';
return $allowed_meta_keys;
}
add_filter( 'rest_api_allowed_public_metadata', 'custom_rest_api_allowed_public_metadata' );
jSONの出力は次のようになります。
"metadata":[{"id":"196711","key":"_ecmb_event_agelim","value":"18"},
{"id":"196709","key":"_ecmb_supporting_bands","value":"The Rolling Stones"},
{"id":"196710","key":"_ecmb_tickets_avail","value":"5500"}]
@birgire返信に加えて、フィルタコードをどこかに置くのは難しいかもしれません。
これが私がしたことがあなたがそれを失うことを心配する必要なしにあなたがWordpress管理者パネル内にあなたのカスタムアクションとフィルターを書くことを可能にする次のプラグインを使うことだった理由です。 http://wordpress.org/plugins/add-actions-and-filters/ /。
私はあなたと同じ問題を抱えていました、そして今フィルタを含めた後にそれは魅力のように働きます。