开发者 | Braad |
---|---|
更新时间 | 2015年12月7日 22:43 |
捐献地址: | 去捐款 |
PHP版本: | 4.0 及以上 |
WordPress版本: | 4.4 |
版权: | GPLv2 or later |
版权网址: | 版权信息 |
show_in_rest
, rest_base
, and rest_controller_class
set on their post type objects in order for the API to start serving data for them. I've included a filter in this plugin for adding these properties so that you can declare REST API support for CPTs and add the extra Genesis data in one step, but the filter is off by default and won't override properties that are already set (because if core doesn't assume you want all your CPTs publicly accessible by default, I don't think I should either). To turn this functionality on, use the included filter like this:
add_filter( 'genesis_rest_api_register_cpt_api_support', '__return_true' );
If you do this, you're CPTs will be available at routes that match the official name of the post type found on the post type object, so if your post type is 'movie' and you have a movie with an id of 8, the movie will be accessible at /wp-json/v2/movie/8. It's probably a better idea to match the core convention of /posts/ and /pages/, so if you want to make the route available at /movies/ instead of /movie/ you just need to specifically set the rest_base
property like so:
add_action( 'init', 'mytheme_change_cpt_routes', 11 );
function mytheme_change_cpt_routes() {
global $wp_post_types;
$wp_post_types['movie']->rest_base = 'movies';
}
Here's the full list of all the Genesis hooks that are currently supported:
genesis_before
genesis_before_header
genesis_site_title
genesis_site_description
genesis_header_right
genesis_after_header
genesis_before_content_sidebar_wrap
genesis_before_content
genesis_before_loop
genesis_before_while
genesis_before_entry
genesis_entry_header
genesis_before_entry_content
genesis_entry_content
genesis_after_entry_content
genesis_entry_footer
genesis_after_entry
genesis_after_endwhile
genesis_after_loop
genesis_before_sidebar_widget_area
genesis_after_sidebar_widget_area
genesis_after_content_sidebar_wrap
genesis_before_footer
genesis_footer
genesis_after_footer
genesis_after
And naturally, there is a filter to control which hooks are supported:
add_filter( 'genesis_rest_api_supported_hooks', 'mytheme_genesis_rest_api_supported_hooks' );
function mytheme_genesis_rest_api_supported_hooks( $genesis_hooks ) {
// Only include certian hooks.
$genesis_hooks = array(
'genesis_before_entry',
'genesis_after_entry',
);
return $genesis_hooks;
}
NOTE: The hooks genesis_header and genesis_loop are not included by default because they mostly call other hooks that are included, but you can always add them back in using the genesis_rest_api_supported_hooks filter.
NOTE: Returning formatted HTML over the REST API is not the best way to make use of a REST API to build a website. It would be preferable to return only the raw object data and build all of your HTML on the client side using the object data. With this plugin you can do exactly this with a little help from json_encode
:
add_action( 'genesis_before_entry_content', 'mytheme_pass_array' );
function mytheme_pass_array() {
if ( is_single( 124 ) ) {
$json = array(
'a_key' => 'some value',
'another_key' => 'another value',
);
echo json_encode( $json );
}
}
Or the object version:
add_action( 'genesis_after_entry_content', 'mytheme_pass_object' );
function mytheme_pass_object() {
if ( in_category( 2 ) ) {
$json = new stdClass();
$json->some_key = 'some value';
$json->another_key = 'another value';
echo json_encode( $json );
}
}
Passing arbitrary objects and arrays like this really opens up some interesting possibilities.
If you have any ideas for new features or find a bug, please open an issue on Github. Pull requests are also encouraged :).
/genesis-rest-api-integration
directory to the /wp-content/plugins/
directory.The WP REST API includes a filter on the response data it returns, and this plugin uses that filter to add the Genesis hook data. The plugin sets the context based on the post being requested and then runs through the full genesis loop once, capturing the output from the Genesis hooks and setting up the response data to be returned along the way.