WordPressにはいくつかのAPIが組み込まれています。
デフォルトでは、カスタムの投稿タイプや保護されたメタキーは返されません。
プラグインの保護されたメタフィールドにアクセスしたいです。 here および here の例に従ってみました。
このコードを追加することで、wp-json APIがカスタム投稿タイプを返すように管理しました。
/**
* Add REST API support to an already registered post type.
*/
add_action( 'init', 'my_custom_post_type_rest_support', 25 );
function my_custom_post_type_rest_support() {
global $wp_post_types;
// be sure to set this to the name of your post type!
$post_type_name = 'tribe_venue';
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';
}
$post_type_name2 = 'tribe_events';
if( isset( $wp_post_types[ $post_type_name2 ] ) ) {
$wp_post_types[$post_type_name2]->show_in_rest = true;
$wp_post_types[$post_type_name2]->rest_base = $post_type_name2;
$wp_post_types[$post_type_name2]->rest_controller_class = 'WP_REST_Posts_Controller';
}
}
しかし、レスポンスに保護されたメタキーを含めることはできませんでした。
私は次のコードを試してみました:
add_filter( 'is_protected_meta', function ( $protected, $key, $type ) {
if ( $type === 'tribe_venue' && $key === '_VenueVenue' ) {
return true;
}
return $protected;
}, 10, 3 );
add_filter( 'rae_include_protected_meta', '__return_true' );
そして次のコード:
function custom_rest_api_allowed_public_metadata($allowed_meta_keys){
$allowed_meta_keys[] = '_VenueVenue';
$allowed_meta_keys[] = '_VenueAddress';
$allowed_meta_keys[] = '_VenueCity';
return $allowed_meta_keys;
}
add_filter( 'rest_api_allowed_public_metadata', 'custom_rest_api_allowed_public_metadata' );
しかしどちらもうまくいきません。
誰が何が必要なのか知っていますか?そのため、そのような保護されたフィールドをAPIのいずれかを介してアクセス可能にしますか?実用的な例はどこかにありますか?
私にとって最も簡単な解決策は、JSONレスポンスに追加のフィールドを作成し、選択した投稿メタを追加することです。
function create_api_posts_meta_field() {
// "tribe_venue" is your post type name,
// "protected-fields" is a name for new JSON field
register_rest_field( 'tribe_venue', 'protected-fields', [
'get_callback' => 'get_post_meta_for_api',
'schema' => null,
] );
}
add_action( 'rest_api_init', 'create_api_posts_meta_field' );
/**
* Callback function to populate our JSON field
*/
function get_post_meta_for_api( $object ) {
$meta = get_post_meta( $object['id'] );
return [
'venue' => $meta['_VenueVenue'] ?: '',
'address' => $meta['_VenueAddress'] ?: '',
'city' => $meta['_VenueCity'] ?: '',
];
}
あなたは/wp-json/wp/v2/tribe_venue/
と/wp-json/wp/v2/tribe_venue/{POST_ID}
の両方であなたのメタデータを見ることができるはずです
REST APIには、使用できるrest_query_vars
フィルタがあります。
function my_allow_meta_query( $valid_vars ) {
$valid_vars = array_merge( $valid_vars, array( 'meta_key', 'meta_value') );
return $valid_vars;
}
add_filter( 'rest_query_vars', 'my_allow_meta_query' );
これにより、メタフィールドを照会するために次のようなルートを使用することができます。
wp-json/wp/v2/posts?filter[meta_key]=MY-KEY&filter[meta_value]=MY-VALUE
もっと複雑な方法もあります。下記のソースリンクをチェックしてください。