summaryrefslogtreecommitdiffstats
path: root/wp-includes/blocks/post-terms
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/blocks/post-terms
parentInitial commit. (diff)
downloadwordpress-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.php114
-rw-r--r--wp-includes/blocks/post-terms/block.json60
-rw-r--r--wp-includes/blocks/post-terms/style-rtl.css6
-rw-r--r--wp-includes/blocks/post-terms/style-rtl.min.css1
-rw-r--r--wp-includes/blocks/post-terms/style.css6
-rw-r--r--wp-includes/blocks/post-terms/style.min.css1
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