Only list the custom block templates in the list of available templates per post type#2020
Only list the custom block templates in the list of available templates per post type#2020youknowriad wants to merge 1 commit intoWordPress:trunkfrom
Conversation
| if ( current_theme_supports( 'block-templates' ) ) { | ||
| $block_templates = get_block_templates( array(), 'wp_template' ); | ||
| foreach ( get_post_types( array( 'public' => true ) ) as $type ) { | ||
| $block_templates = get_block_templates( array( 'post_type' => $type ), 'wp_template' ); |
There was a problem hiding this comment.
Thanks for working on this, Riad. While an update will fix the issue, I'm a little worried about the WP_Query calls this change will produce.
Since only custom templates (is_custom = true) are allowed to be page/post templates, maybe we use that property and conditionally add templates to the list?
There was a problem hiding this comment.
I'm not sure I understand? Are you worried about the number of requests? Is there a way maybe to solve this by adding a new is_custom to the query object?
There was a problem hiding this comment.
Yes, I'm worried about the number of requests.
We'll still need the post_type to check if the template is supported for this specific post type.
I think this has to be done slightly differently than we do in a plugin. I can create PR for my idea of PoC later today/tomorrow if we're not limited in the timeline.
There was a problem hiding this comment.
Rough example:
if ( current_theme_supports( 'block-templates' ) ) {
$block_templates = get_block_templates( array(), 'wp_template' );
foreach ( get_post_types( array( 'public' => true ) ) as $type ) {
foreach ( $block_templates as $block_template ) {
if ( ! $block_template->is_custom ) {
continue;
}
if ( isset( $block_template->post_types ) && ! in_array( $type, $block_template->post_types, true ) ) {
continue;
}
$post_templates[ $type ][ $block_template->slug ] = $block_template->title;
}
}
}We have to use properties directly in the loop instead of passing post type as query argument because we don't have access to the current post type in the get_post_templates method.
There was a problem hiding this comment.
we don't have access to the current post type in the get_post_templates method.
Why we need that to determine whether a template is is_custom ?
--
I think we can probably commit the PR as is and consider improvements in follow-up to buy us time WDYT?
There was a problem hiding this comment.
I think we can probably commit the PR as is and consider improvements in follow-up to buy us time WDYT?
Sounds good. I can do a follow-up PR for beta 3.
Why we need that to determine whether a template is is_custom?
We don't need to know the post type for is_custom.
|
Committed in https://core.trac.wordpress.org/changeset/52334 |
This backports a change that was missed during the initial backports related to the templates list shown in the post editor.
It's a change from the following Gutenberg PR WordPress/gutenberg#35802
Trac ticket: https://core.trac.wordpress.org/ticket/54335
Testing instructions
Make sure the post editor only shows custom page templates in the template list and not hierarchy templates (index, single...)
cc @Mamaduka