-
Notifications
You must be signed in to change notification settings - Fork 26
REST API: Add source
parameter for types endpoint
#128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: trunk
Are you sure you want to change the base?
Conversation
@@ -3,7 +3,7 @@ | |||
* REST API | |||
* | |||
* @package Secure Custom Fields | |||
* @since ACF 6.4.0 | |||
* @since 6.5.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we specify SCF 6.5.0 . So LLMs don't mess.
console.log('All types:', Object.keys(allTypes)); | ||
console.log('SCF types:', Object.keys(scfTypes)); | ||
console.log('Core types:', Object.keys(coreTypes)); | ||
console.log('Other types:', Object.keys(otherTypes)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's remove the logs here.
console.log(`Test post type ${customTestType} not found - skipping SCF single post type tests`); | ||
} | ||
} catch (error) { | ||
console.log(`Error checking SCF test type: ${error.message}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are mixing console.error and console.logs in errors :-)
console.log('SCF post types:', Object.keys(scfTypes)); | ||
|
||
const coreTypes = await requestUtils.rest({ | ||
path: '/wp/v2/types', | ||
params: { source: 'core' } | ||
}); | ||
console.log('Core post types:', Object.keys(coreTypes)); | ||
|
||
const otherTypes = await requestUtils.rest({ | ||
path: '/wp/v2/types', | ||
params: { source: 'other' } | ||
}); | ||
console.log('Other post types:', Object.keys(otherTypes)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's remove this logs too.
if (inScf) { | ||
console.log(`✅ Perfect! Test post type is in SCF source as desired`); | ||
} else if (inOther) { | ||
console.log(`⚠️ Acceptable: Test post type in other source (our filter hook didn't work)`); | ||
} | ||
} else { | ||
console.log(`⚠️ Test post type ${customTestType} not found - skipping this part of the test`); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't need this too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In my opinion, most of console logs are not necessary. Let's avoid to fill the logs of CI with them. The rest of the PR is working as expected, nice job!! 🚀
What
/wp/v2/types
REST API endpoint that allows filtering post types by their origin:core
(WordPress built-in),scf
(for SCF managed types), orother
for the rest of CPTs./wp/v2/types
) and single item (/wp/v2/types/{type}
) endpointsWhy
When working on the Command Palette Integration and considering using the REST API to define CPT-related commands, requesting specifically for the CPTs managed by SCF became a need, and it will be needed, too, when implementing DataViews.
In fact, this branch is directly based on #124 and started in parallel, as we both realized we needed to tweak the Types endpoint if we wanted to leverage the API.
How
source
parameter is not defined, nothing changes.rest_request_before_callbacks
for the single request, returning 404 if the requested type doesn't meet the criteria.rest_prepare_post_type
to filter each post type by source before WordPress prepares it.rest_pre_echo_response
to removenull
values returned byrest_prepare_post_type
in the response array.rest_prepare_post_type
fires once per post type, the Post Types belonging to the requested source are calculated in advance inrest_request_before_callbacks
and reused throughout the whole request.Testing Instructions
- Make a GET request to
/wp/v2/types
to see all post types- Add
?source=core
to filter for WordPress built-in post types only- Add ?source=scf to see only post types managed by SCF
- Try
?source=other
to see post types registered from other sources- Test single post type endpoints like
/wp/v2/types/post?source=core
- Try an invalid source value (e.g.,
?source=invalid
) to verify validation works- Confirm a 404 error when requesting a post type with the wrong source
- Run PHPUnit tests:
composer test:php -- --filter=Test_REST_Types_Endpoint
- Run E2E tests:
npm run test:e2e tests/e2e/rest-api-types-endpoint.spec.ts
Potential follow-ups
source
as a field in the response, as there would be no performance loss.