Custom Post Type no longer appears in REST API
nightillusions opened this issue · 5 comments
As the title suggests, the custom post type "transport-zones" is no longer returning in the REST API endpoint "https://www.gabco.de/wp-json/wp/v2/transport-zones". Instead, the standard posts are returning under the this endpoint like from the endpoint "https://www.gabco.de/wp-json/wp/v2/posts". In contrast, the custom taxonomy "countries" works beautifully: https://www.gabco.de/wp-json/wp/v2/countries/
This has all worked for a year so far and recently it no longer works. I don't know if it's related to some update, anyway I didn't find any hints in the changelogs.
I would be very grateful for any help!
Code:
<?php
require __DIR__ . '/../vendor/autoload.php';
add_action( 'init', function() {
$menu_icon = 'data:image/svg+xml;base64,' . base64_encode('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="black" d="M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H464c-17.7 0-32 14.3-32 32v144H32c-17.7 0-32 14.3-32 32v27.8c0 40.8 28.7 78.1 69.1 83.5 30.7 4.1 58.3-9.5 74.9-31.7 18.4 24.7 50.4 38.7 85.3 29.7 25.2-6.5 46.1-26.2 54.4-50.8 4.9-14.8 5.4-29.2 2.8-42.4h163.2c-2.7 13.2-2.2 27.6 2.8 42.4 8.4 25.1 29.9 44.9 55.6 51.1 52.8 12.8 100-26.9 100-77.6 0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17.1-6.7-33.3-18.7-45.3zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm-48-176v-48h37.5c4.2 0 8.3 1.7 11.3 4.7l43.3 43.3H480zM32 304h336c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v208c0 17.7 14.3 32 32 32zM304 80h32v176h-32V80zm-80 0h32v176h-32V80zm-80 0h32v176h-32V80zm-80 0h32v176H64V80z"/></svg>');
register_extended_taxonomy( 'countries', 'transport-zones', array(
'meta_box' => 'dropdown',
'checked_ontop' => true,
'dashboard_glance' => true,
'admin_cols' => array(
'title'
),
'hierarchical' => false,
'show_in_quick_edit' => false,
'labels' => array(
'name' => __( 'Länder', 'transport-zones' ),
'singular_name' => __( 'Land', 'transport-zones' ),
'menu_name' => __( 'Länder', 'transport-zones' ),
'all_items' => __( 'Alle Länder', 'transport-zones' ),
'edit_item' => __( 'Bearbeiten', 'transport-zones' ),
'view_item' => __( 'Zeige Land', 'transport-zones' ),
'update_item' => __( 'Land aktualisieren', 'transport-zones' ),
'add_new_item' => __( 'Neues Land erstellen', 'transport-zones' ),
'new_item_name' => __( 'Name des neuen Lands', 'transport-zones' ),
'search_items' => __( 'Suche nach Land', 'transport-zones' ),
'popular_items' => __( 'Beliebte Länder', 'transport-zones' ),
'add_or_remove_items' => __( 'Land hinzufügen oder entfernen', 'transport-zones' ),
'choose_from_most_used' => __( 'Aus den am häufigsten verwendeten Ländern wählen', 'transport-zones' ),
'name_admin_bar' => __( 'Länder', 'transport-zones' ),
'add_new' => __( 'Neues erstellen', 'transport-zones' ),
'new_item' => __( 'Neues Land', 'transport-zones' ),
'not_found' => __( 'Kein Land gefunden', 'transport-zones' ),
'not_found_in_trash' => __( 'Kein Land im Papierkorb gefunden', 'transport-zones' ),
'parent_item' => __( 'Übergeordnetes Land', 'transport-zones' ),
'parent_item_colon' => __( 'Übergeordnetes Land:', 'transport-zones' ),
'separate_items_with_commas' => __( 'Länder mit Kommas trennen', 'transport-zones' ),
),
'show_in_rest' => true,
),
array(
'singular' => 'Land',
'plural' => 'Länder',
'slug' => 'countries'
) );
register_extended_post_type( 'transport-zones', array(
'enter_title_here' => 'PLZ',
'public' => true,
'menu_icon' => $menu_icon,
'delete_with_user' => false,
'has_archive' => true,
'show_in_rest' => true,
'taxonomies' => array('countries'),
'capability_type' => 'post',
'map_meta_cap' => true,
'supports' => array(
'title',
// 'editor',
// 'excerpt',
// 'author',
// 'thumbnail',
// 'custom-fields',
// 'revisions',
// 'page-attributes',
// 'post-formats',
),
'show_in_feed' => false,
'archive' => array(
'nopaging' => true
),
'admin_cols' => array(
'title' => array(
'title' => 'Transportzone'
),
'category' => array(
'title' => 'Land',
'taxonomy' => 'countries'
),
'price_vat' => array(
'title' => 'Preis inkl. MwSt.',
'function' => function() {
global $post;
$details = get_field('attributes', $post->ID);
echo $details['price'] . ' €';
},
),
'price' => array(
'title' => 'Preis zzgl. MwSt.',
'function' => function() {
global $post;
$details = get_field('attributes', $post->ID);
echo ( number_format( (float) $details['price'] / 1.19 , 2, ',', '.' ) ) . ' €';
},
),
'zone' => array(
'title' => 'Zone',
'function' => function() {
global $post;
$details = get_field('attributes', $post->ID);
echo $details['zone'];
},
),
),
'admin_filters' => array(
'countries' => array(
'taxonomy' => 'countries'
)
),
'labels' => array(
'name' => __( 'Transportzonen', 'transport-zones' ),
'singular_name' => __( 'Transportzone', 'transport-zones' ),
'menu_name' => __( 'Transportzonen', 'transport-zones' ),
'name_admin_bar' => __( 'Transportzonen', 'transport-zones' ),
'add_new' => __( 'Neue erstellen', 'transport-zones' ),
'add_new_item' => __( 'Neue Transportzone erstellen', 'transport-zones' ),
'edit_item' => __( 'Bearbeiten', 'transport-zones' ),
'new_item' => __( 'Neue Transportzone', 'transport-zones' ),
'view_item' => __( 'Zeige Transportzone', 'transport-zones' ),
'search_items' => __( 'Suche nach Transportzone', 'transport-zones' ),
'not_found' => __( 'Keine Transportzone gefunden', 'transport-zones' ),
'not_found_in_trash' => __( 'Keine Transportzone im Papierkorb gefunden', 'transport-zones' ),
'all_items' => __( 'Alle Transportzonen', 'transport-zones' ),
'archives' => __( 'Transportzonenseite', 'transport-zones' ),
'featured_image' => __( 'Featured Image', 'transport-zones' ),
'set_featured_image' => __( 'Set featured image', 'transport-zones' ),
'remove_featured_image' => __( 'Remove featured image', 'transport-zones' ),
'use_featured_image' => __( 'Use as featured image', 'transport-zones' ),
'insert_into_item' => __( 'In Transportzone einfügen', 'transport-zones' ),
'uploaded_to_this_item' => __( 'Zu dieser Transportzone hochgeladen', 'transport-zones' ),
'views' => __( 'Filter Transportzonenliste', 'transport-zones' ),
'pagination' => __( 'Transportzonenlisten Navigation', 'transport-zones' ),
'list' => __( 'Transportzonenliste', 'transport-zones' ),
'parent_item' => __( 'Übergeordnete Transportzone', 'transport-zones' ),
'parent_item_colon' => __( 'Übergeordnete Transportzone:', 'transport-zones' ),
)
), array(
'singular' => 'Transportzone',
'plural' => 'Transportzonen',
'slug' => 'transport-zones'
) );
} );
/**
* Hide the term description in the edit form
*/
add_action( 'countries_add_form', function( $taxonomy )
{
?><style>.term-description-wrap{display:none;}</style><?php
}, 10, 2 );
/**
* Hide the term description in the post_tag edit form
*/
add_action( "countries_edit_form", function( $tag, $taxonomy )
{
?><style>.term-description-wrap{display:none;}</style><?php
}, 10, 2 );
/**
* Remove the 'description' column from the table in 'edit-tags.php'
*/
add_filter('manage_edit-countries_columns', function ( $columns )
{
if( isset( $columns['description'] ) )
unset( $columns['description'] );
return $columns;
} );
Thanks for the report. Does this problem occur if you register the post type using the native register_post_type()
function from WordPress? Or does it only happen with Extended CPTs?
Hi,
with the native register_post_type()
it works. So it only happens with Extended CPTs:
function transport_zones_init() {
$labels = array(
'name' => __( 'Transportzonen', 'transport-zones' ),
'singular_name' => __( 'Transportzone', 'transport-zones' ),
'menu_name' => __( 'Transportzonen', 'transport-zones' ),
'name_admin_bar' => __( 'Transportzonen', 'transport-zones' ),
'add_new' => __( 'Neue erstellen', 'transport-zones' ),
'add_new_item' => __( 'Neue Transportzone erstellen', 'transport-zones' ),
'edit_item' => __( 'Bearbeiten', 'transport-zones' ),
'new_item' => __( 'Neue Transportzone', 'transport-zones' ),
'view_item' => __( 'Zeige Transportzone', 'transport-zones' ),
'search_items' => __( 'Suche nach Transportzone', 'transport-zones' ),
'not_found' => __( 'Keine Transportzone gefunden', 'transport-zones' ),
'not_found_in_trash' => __( 'Keine Transportzone im Papierkorb gefunden', 'transport-zones' ),
'all_items' => __( 'Alle Transportzonen', 'transport-zones' ),
'archives' => __( 'Transportzonenseite', 'transport-zones' ),
'featured_image' => __( 'Featured Image', 'transport-zones' ),
'set_featured_image' => __( 'Set featured image', 'transport-zones' ),
'remove_featured_image' => __( 'Remove featured image', 'transport-zones' ),
'use_featured_image' => __( 'Use as featured image', 'transport-zones' ),
'insert_into_item' => __( 'In Transportzone einfügen', 'transport-zones' ),
'uploaded_to_this_item' => __( 'Zu dieser Transportzone hochgeladen', 'transport-zones' ),
'views' => __( 'Filter Transportzonenliste', 'transport-zones' ),
'pagination' => __( 'Transportzonenlisten Navigation', 'transport-zones' ),
'list' => __( 'Transportzonenliste', 'transport-zones' ),
// Labels for hierarchical post types only.transport-zones
'parent_item' => __( 'Übergeordnete Transportzone', 'transport-zones' ),
'parent_item_colon' => __( 'Übergeordnete Transportzone:', 'transport-zones' ),
);
$args = array(
'labels' => $labels,
'description' => 'transport-zones custom post type.',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'transport-zones' ),
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => false,
'menu_position' => 20,
'supports' => array( 'title' ),
'taxonomies' => array( 'category', 'post_tag' ),
'show_in_rest' => true
);
register_post_type( 'transport-zones', $args );
}
add_action( 'init', 'transport_zones_init' );
Okay, I close this Issue.
Finally I found the problem:
In WP 5.7 the rest_{$this->post_type}_query
hook changed in the order position, because of the new "tax_query".
My rest_{$this->post_type}_query
hook for ordering the rest response by custom field was the reason for all this. After some minor changes, everything works again.
Sorry ^^
Thanks for letting me know 👍
Okay, I close this Issue.
Finally I found the problem:
In WP 5.7 therest_{$this->post_type}_query
hook changed in the order position, because of the new "tax_query".
Myrest_{$this->post_type}_query
hook for ordering the rest response by custom field was the reason for all this. After some minor changes, everything works again.Sorry ^^
it still didn't get clear how did you solved this issue i am trying to query it through wp_query but i am not getting results for extended taxonomies using "tax_query"