Editor: Make template names and descriptions dynamic, again.
In the lead up to 6.1 Beta 2, dynamic titles and descriptions for site editor templates was deemed "feature incomplete" and [54280] was reverted. After further consideration, this code is being re-merged in preparation for Beta 3, reverting the revert in [54333]. Follow-up to [54280] and [54333]. Props bernie, ntsekouras, jorgefilipecosta, jameskoster, cbravobernal. See #56467. Built from https://develop.svn.wordpress.org/trunk@54370 git-svn-id: http://core.svn.wordpress.org/trunk@53929 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
91900d2639
commit
f82413b29d
|
@ -530,6 +530,144 @@ function _build_block_template_result_from_file( $template_file, $template_type
|
|||
return $template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the title and description of a post-specific template based on the underlying referenced post.
|
||||
*
|
||||
* Mutates the underlying template object.
|
||||
*
|
||||
* @since 6.1.0
|
||||
* @access private
|
||||
*
|
||||
* @param string $post_type Post type, e.g. page, post, product.
|
||||
* @param string $slug Slug of the post, e.g. a-story-about-shoes.
|
||||
* @param WP_Block_Template $template Template to mutate adding the description and title computed.
|
||||
* @return bool Returns true if the referenced post was found and false otherwise.
|
||||
*/
|
||||
function _wp_build_title_and_description_for_single_post_type_block_template( $post_type, $slug, WP_Block_Template $template ) {
|
||||
$post_type_object = get_post_type_object( $post_type );
|
||||
|
||||
$posts = get_posts(
|
||||
array(
|
||||
'name' => $slug,
|
||||
'post_type' => $post_type,
|
||||
)
|
||||
);
|
||||
|
||||
if ( empty( $posts ) ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor referencing a post that was not found. 1: Post type singular name, 2: Post type slug. */
|
||||
__( 'Not found: %1$s (%2$s)' ),
|
||||
$post_type_object->labels->singular_name,
|
||||
$slug
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$post_title = $posts[0]->post_title;
|
||||
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. 1: Post type singular name, 2: Post title. */
|
||||
__( '%1$s: %2$s' ),
|
||||
$post_type_object->labels->singular_name,
|
||||
$post_title
|
||||
);
|
||||
|
||||
$template->description = sprintf(
|
||||
/* translators: Custom template description in the Site Editor. %s: Post title. */
|
||||
__( 'Template for %s' ),
|
||||
$post_title
|
||||
);
|
||||
|
||||
$posts_with_same_title = get_posts(
|
||||
array(
|
||||
'title' => $post_title,
|
||||
'post_type' => $post_type,
|
||||
'post_status' => 'publish',
|
||||
)
|
||||
);
|
||||
|
||||
if ( count( $posts_with_same_title ) > 1 ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. 1: Template title, 2: Post type slug. */
|
||||
__( '%1$s (%2$s)' ),
|
||||
$template->title,
|
||||
$slug
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the title and description of a taxonomy-specific template based on the underlying entity referenced.
|
||||
*
|
||||
* Mutates the underlying template object.
|
||||
*
|
||||
* @since 6.1.0
|
||||
* @access private
|
||||
*
|
||||
* @param string $taxonomy Identifier of the taxonomy, e.g. category.
|
||||
* @param string $slug Slug of the term, e.g. shoes.
|
||||
* @param WP_Block_Template $template Template to mutate adding the description and title computed.
|
||||
* @return bool True if the term referenced was found and false otherwise.
|
||||
*/
|
||||
function _wp_build_title_and_description_for_taxonomy_block_template( $taxonomy, $slug, WP_Block_Template $template ) {
|
||||
$taxonomy_object = get_taxonomy( $taxonomy );
|
||||
|
||||
$terms = get_terms(
|
||||
array(
|
||||
'taxonomy' => $taxonomy,
|
||||
'hide_empty' => false,
|
||||
'slug' => $slug,
|
||||
)
|
||||
);
|
||||
|
||||
if ( empty( $terms ) ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor, referencing a taxonomy term that was not found. 1: Taxonomy singular name, 2: Term slug. */
|
||||
__( 'Not found: %1$s (%2$s)' ),
|
||||
$taxonomy_object->labels->singular_name,
|
||||
$slug
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
$term_title = $terms[0]->name;
|
||||
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. 1: Taxonomy singular name, 2: Term title. */
|
||||
__( '%1$s: %2$s' ),
|
||||
$taxonomy_object->labels->singular_name,
|
||||
$term_title
|
||||
);
|
||||
|
||||
$template->description = sprintf(
|
||||
/* translators: Custom template description in the Site Editor. %s: Term title. */
|
||||
__( 'Template for %s' ),
|
||||
$term_title
|
||||
);
|
||||
|
||||
$terms_with_same_title = get_terms(
|
||||
array(
|
||||
'taxonomy' => $taxonomy,
|
||||
'hide_empty' => false,
|
||||
'name' => $term_title,
|
||||
)
|
||||
);
|
||||
|
||||
if ( count( $terms_with_same_title ) > 1 ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. 1: Template title, 2: Term slug. */
|
||||
__( '%1$s (%2$s)' ),
|
||||
$template->title,
|
||||
$slug
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a unified template object based a post Object.
|
||||
*
|
||||
|
@ -589,6 +727,114 @@ function _build_block_template_result_from_post( $post ) {
|
|||
}
|
||||
}
|
||||
|
||||
// Check for a block template without a description and title or with a title equal to the slug.
|
||||
if ( 'wp_template' === $post->post_type && empty( $template->description ) && ( empty( $template->title ) || $template->title === $template->slug ) ) {
|
||||
$matches = array();
|
||||
|
||||
// Check for a block template for a single author, page, post, tag, category, custom post type, or custom taxonomy.
|
||||
if ( preg_match( '/(author|page|single|tag|category|taxonomy)-(.+)/', $template->slug, $matches ) ) {
|
||||
$type = $matches[1];
|
||||
$slug_remaining = $matches[2];
|
||||
|
||||
switch ( $type ) {
|
||||
case 'author':
|
||||
$nice_name = $slug_remaining;
|
||||
$users = get_users(
|
||||
array(
|
||||
'capability' => 'edit_posts',
|
||||
'search' => $nice_name,
|
||||
'search_columns' => array( 'user_nicename' ),
|
||||
'fields' => 'display_name',
|
||||
)
|
||||
);
|
||||
|
||||
if ( empty( $users ) ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor, referencing a deleted author. %s: Author nicename. */
|
||||
__( 'Deleted author: %s' ),
|
||||
$nice_name
|
||||
);
|
||||
} else {
|
||||
$author_name = $users[0];
|
||||
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. %s: Author name. */
|
||||
__( 'Author: %s' ),
|
||||
$author_name
|
||||
);
|
||||
|
||||
$template->description = sprintf(
|
||||
/* translators: Custom template description in the Site Editor. %s: Author name. */
|
||||
__( 'Template for %s' ),
|
||||
$author_name
|
||||
);
|
||||
|
||||
$users_with_same_name = get_users(
|
||||
array(
|
||||
'capability' => 'edit_posts',
|
||||
'search' => $author_name,
|
||||
'search_columns' => array( 'display_name' ),
|
||||
'fields' => 'display_name',
|
||||
)
|
||||
);
|
||||
|
||||
if ( count( $users_with_same_name ) > 1 ) {
|
||||
$template->title = sprintf(
|
||||
/* translators: Custom template title in the Site Editor. 1: Template title of an author template, 2: Author nicename. */
|
||||
__( '%1$s (%2$s)' ),
|
||||
$template->title,
|
||||
$nice_name
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'page':
|
||||
_wp_build_title_and_description_for_single_post_type_block_template( 'page', $slug_remaining, $template );
|
||||
break;
|
||||
case 'single':
|
||||
$post_types = get_post_types();
|
||||
|
||||
foreach ( $post_types as $post_type ) {
|
||||
$post_type_length = strlen( $post_type ) + 1;
|
||||
|
||||
// If $slug_remaining starts with $post_type followed by a hyphen.
|
||||
if ( 0 === strncmp( $slug_remaining, $post_type . '-', $post_type_length ) ) {
|
||||
$slug = substr( $slug_remaining, $post_type_length, strlen( $slug_remaining ) );
|
||||
$found = _wp_build_title_and_description_for_single_post_type_block_template( $post_type, $slug, $template );
|
||||
|
||||
if ( $found ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'tag':
|
||||
_wp_build_title_and_description_for_taxonomy_block_template( 'post_tag', $slug_remaining, $template );
|
||||
break;
|
||||
case 'category':
|
||||
_wp_build_title_and_description_for_taxonomy_block_template( 'category', $slug_remaining, $template );
|
||||
break;
|
||||
case 'taxonomy':
|
||||
$taxonomies = get_taxonomies();
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
$taxonomy_length = strlen( $taxonomy ) + 1;
|
||||
|
||||
// If $slug_remaining starts with $taxonomy followed by a hyphen.
|
||||
if ( 0 === strncmp( $slug_remaining, $taxonomy . '-', $taxonomy_length ) ) {
|
||||
$slug = substr( $slug_remaining, $taxonomy_length, strlen( $slug_remaining ) );
|
||||
$found = _wp_build_title_and_description_for_taxonomy_block_template( $taxonomy, $slug, $template );
|
||||
|
||||
if ( $found ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $template;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '6.1-beta2-54369';
|
||||
$wp_version = '6.1-beta2-54370';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue