I tried to reproduce the issue with the following post type and taxonomy registration code (which I put in the functions.php
file of a child theme):
add_action( 'init', function () {
register_post_type( 'venue', [
'public' => true,
'label' => 'Venues',
'show_in_rest' => true,
] );
register_taxonomy( 'country', 'venue', [
'public' => true,
'label' => 'Countries',
'show_admin_column' => true,
'show_in_rest' => true,
] );
} );
Then I used your code to register the custom REST API endpoint (note though, you should always set the permission callback just as I did below):
register_rest_route( 'myevents/v2', '/venue', array(
'methods' => 'GET',
'callback' => 'myevents_get_post_items',
// always set this, but the value doesn't need to be __return_true
'permission_callback' => '__return_true',
) );
And then when I visited https://example.com/wp-json/myevents/v2/venue
, I did not get the “invalid taxonomy” error.
But I did notice an issue in your myevents_get_post_items()
function — the $post
variable is undefined.
Hence I used $post_id = get_the_ID();
instead of $post_id = $post->ID;
. (But you could instead add global $post;
or $post = get_post();
somewhere in your function, before you access the $post
.)
So please fix that issue and ensure that your custom taxonomy is registered in the init
hook. And note that the wp_get_object_terms()
call worked for me, with or without setting the show_in_rest
to a true
.
Also, I guessed those echo
and print_r()
calls were just for testing, but still, keep in mind that your callback should not echo anything.