Gibt es eine Möglichkeit, geschützte Meta-Felder über eine der verfügbaren integrierten WordPress-APIs zu erhalten? (xmlrpc, wp-json)

WordPress hat mehrere APIs eingebaut:

  • XML-RPC
  • REST-API

Standardmäßig geben sie keine benutzerdefinierten Post-Typen oder geschützte Metaschlüssel zurück.

Ich möchte auf die geschützten Meta-Felder eines Plugins zugreifen. Ich habe versucht, den hier und hier aufgeführten Beispielen zu folgen.

Ich habe es geschafft, dass die wp-json-API benutzerdefinierte Post-Typen zurückgibt, indem sie diesen Code hinzufügt:

/** * 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'; } } 

Aber ich konnte keine geschützten Metaschlüssel in die Antwort aufnehmen.

Ich habe den folgenden Code ausprobiert:

 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' ); 

und der folgende Code:

 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' ); 

aber keiner funktioniert.

Weiß jemand, was benötigt wird, um solche geschützten Felder über eine der APIs zugänglich zu machen? Gibt es irgendwo ein funktionierendes Beispiel?

Solutions Collecting From Web of "Gibt es eine Möglichkeit, geschützte Meta-Felder über eine der verfügbaren integrierten WordPress-APIs zu erhalten? (xmlrpc, wp-json)"

Für mich wäre die einfachste Lösung, ein zusätzliches Feld in der JSON-Antwort zu erstellen und es mit ausgewähltem Post-Meta zu füllen:

 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'] ?: '', ]; } 

Sie sollten Ihre Metadaten sowohl in /wp-json/wp/v2/tribe_venue/ und /wp-json/wp/v2/tribe_venue/{POST_ID}

Mit der REST-API gibt es einen rest_query_vars Filter, den Sie verwenden können:

 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' ); 

So können Sie eine Route wie diese verwenden, um ein Meta-Feld abzufragen:

wp-json/wp/v2/posts?filter[meta_key]=MY-KEY&filter[meta_value]=MY-VALUE

Es gibt auch komplexere Möglichkeiten, wie Sie es tun können. Schau dir den Quelllink unten an.

Quelle: https://1fix.io/blog/2015/07/20/query-vars-wp-api/