diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/blocks/post-terms | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | wp-includes/blocks/post-terms.php | 114 | ||||
-rw-r--r-- | wp-includes/blocks/post-terms/block.json | 60 | ||||
-rw-r--r-- | wp-includes/blocks/post-terms/style-rtl.css | 6 | ||||
-rw-r--r-- | wp-includes/blocks/post-terms/style-rtl.min.css | 1 | ||||
-rw-r--r-- | wp-includes/blocks/post-terms/style.css | 6 | ||||
-rw-r--r-- | wp-includes/blocks/post-terms/style.min.css | 1 |
6 files changed, 188 insertions, 0 deletions
diff --git a/wp-includes/blocks/post-terms.php b/wp-includes/blocks/post-terms.php new file mode 100644 index 0000000..c97155b --- /dev/null +++ b/wp-includes/blocks/post-terms.php @@ -0,0 +1,114 @@ +<?php +/** + * Server-side rendering of the `core/post-terms` block. + * + * @package WordPress + */ + +/** + * Renders the `core/post-terms` block on the server. + * + * @param array $attributes Block attributes. + * @param string $content Block default content. + * @param WP_Block $block Block instance. + * @return string Returns the filtered post terms for the current post wrapped inside "a" tags. + */ +function render_block_core_post_terms( $attributes, $content, $block ) { + if ( ! isset( $block->context['postId'] ) || ! isset( $attributes['term'] ) ) { + return ''; + } + + if ( ! is_taxonomy_viewable( $attributes['term'] ) ) { + return ''; + } + + $post_terms = get_the_terms( $block->context['postId'], $attributes['term'] ); + if ( is_wp_error( $post_terms ) || empty( $post_terms ) ) { + return ''; + } + + $classes = array( 'taxonomy-' . $attributes['term'] ); + if ( isset( $attributes['textAlign'] ) ) { + $classes[] = 'has-text-align-' . $attributes['textAlign']; + } + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + + $separator = empty( $attributes['separator'] ) ? ' ' : $attributes['separator']; + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); + + $prefix = "<div $wrapper_attributes>"; + if ( isset( $attributes['prefix'] ) && $attributes['prefix'] ) { + $prefix .= '<span class="wp-block-post-terms__prefix">' . $attributes['prefix'] . '</span>'; + } + + $suffix = '</div>'; + if ( isset( $attributes['suffix'] ) && $attributes['suffix'] ) { + $suffix = '<span class="wp-block-post-terms__suffix">' . $attributes['suffix'] . '</span>' . $suffix; + } + + return get_the_term_list( + $block->context['postId'], + $attributes['term'], + wp_kses_post( $prefix ), + '<span class="wp-block-post-terms__separator">' . esc_html( $separator ) . '</span>', + wp_kses_post( $suffix ) + ); +} + +/** + * Registers the `core/post-terms` block on the server. + */ +function register_block_core_post_terms() { + $taxonomies = get_taxonomies( + array( + 'publicly_queryable' => true, + 'show_in_rest' => true, + ), + 'objects' + ); + + // Split the available taxonomies to `built_in` and custom ones, + // in order to prioritize the `built_in` taxonomies at the + // search results. + $built_ins = array(); + $custom_variations = array(); + + // Create and register the eligible taxonomies variations. + foreach ( $taxonomies as $taxonomy ) { + $variation = array( + 'name' => $taxonomy->name, + 'title' => $taxonomy->label, + 'description' => sprintf( + /* translators: %s: taxonomy's label */ + __( 'Display a list of assigned terms from the taxonomy: %s' ), + $taxonomy->label + ), + 'attributes' => array( + 'term' => $taxonomy->name, + ), + 'isActive' => array( 'term' ), + 'scope' => array( 'inserter', 'transform' ), + ); + // Set the category variation as the default one. + if ( 'category' === $taxonomy->name ) { + $variation['isDefault'] = true; + } + if ( $taxonomy->_builtin ) { + $built_ins[] = $variation; + } else { + $custom_variations[] = $variation; + } + } + + register_block_type_from_metadata( + __DIR__ . '/post-terms', + array( + 'render_callback' => 'render_block_core_post_terms', + 'variations' => array_merge( $built_ins, $custom_variations ), + ) + ); +} +add_action( 'init', 'register_block_core_post_terms' ); diff --git a/wp-includes/blocks/post-terms/block.json b/wp-includes/blocks/post-terms/block.json new file mode 100644 index 0000000..0da7fb0 --- /dev/null +++ b/wp-includes/blocks/post-terms/block.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "core/post-terms", + "title": "Post Terms", + "category": "theme", + "description": "Post terms.", + "textdomain": "default", + "attributes": { + "term": { + "type": "string" + }, + "textAlign": { + "type": "string" + }, + "separator": { + "type": "string", + "default": ", " + }, + "prefix": { + "type": "string", + "default": "" + }, + "suffix": { + "type": "string", + "default": "" + } + }, + "usesContext": [ "postId", "postType" ], + "supports": { + "html": false, + "color": { + "gradients": true, + "link": true, + "__experimentalDefaultControls": { + "background": true, + "text": true, + "link": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "fontSize": true, + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + } + }, + "style": "wp-block-post-terms" +} diff --git a/wp-includes/blocks/post-terms/style-rtl.css b/wp-includes/blocks/post-terms/style-rtl.css new file mode 100644 index 0000000..819c1cb --- /dev/null +++ b/wp-includes/blocks/post-terms/style-rtl.css @@ -0,0 +1,6 @@ +.wp-block-post-terms{ + box-sizing:border-box; +} +.wp-block-post-terms .wp-block-post-terms__separator{ + white-space:pre-wrap; +}
\ No newline at end of file diff --git a/wp-includes/blocks/post-terms/style-rtl.min.css b/wp-includes/blocks/post-terms/style-rtl.min.css new file mode 100644 index 0000000..3762d4c --- /dev/null +++ b/wp-includes/blocks/post-terms/style-rtl.min.css @@ -0,0 +1 @@ +.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}
\ No newline at end of file diff --git a/wp-includes/blocks/post-terms/style.css b/wp-includes/blocks/post-terms/style.css new file mode 100644 index 0000000..819c1cb --- /dev/null +++ b/wp-includes/blocks/post-terms/style.css @@ -0,0 +1,6 @@ +.wp-block-post-terms{ + box-sizing:border-box; +} +.wp-block-post-terms .wp-block-post-terms__separator{ + white-space:pre-wrap; +}
\ No newline at end of file diff --git a/wp-includes/blocks/post-terms/style.min.css b/wp-includes/blocks/post-terms/style.min.css new file mode 100644 index 0000000..3762d4c --- /dev/null +++ b/wp-includes/blocks/post-terms/style.min.css @@ -0,0 +1 @@ +.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}
\ No newline at end of file |