WP_Interactivity_API::data_wp_each_processor( WP_Interactivity_API_Directives_Processor $p, string $mode, array $context_stack, array $namespace_stack, array $tag_stack )

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

Processes the data-wp-each directive.

Description

This directive gets an array passed as reference and iterates over it generating new content for each item based on the inner markup of the template tag.

Parameters

$pWP_Interactivity_API_Directives_Processorrequired
The directives processor instance.
$modestringrequired
Whether the processing is entering or exiting the tag.
$context_stackarrayrequired
The reference to the context stack.
$namespace_stackarrayrequired
The reference to the store namespace stack.
$tag_stackarrayrequired
The reference to the tag stack.

Source

				 * If the style attribute value is not empty, it sets it. Otherwise,
				 * it removes it.
				 */
				if ( ! empty( $style_attribute_value ) ) {
					$p->set_attribute( 'style', $style_attribute_value );
				} else {
					$p->remove_attribute( 'style' );
				}
			}
		}
	}
}

/**
 * Merges an individual style property in the `style` attribute of an HTML
 * element, updating or removing the property when necessary.
 *
 * If a property is modified, the old one is removed and the new one is added
 * at the end of the list.
 *
 * @since 6.5.0
 *
 * Example:
 *
 *     merge_style_property( 'color:green;', 'color', 'red' )      => 'color:red;'
 *     merge_style_property( 'background:green;', 'color', 'red' ) => 'background:green;color:red;'
 *     merge_style_property( 'color:green;', 'color', null )       => ''
 *
 * @param string            $style_attribute_value The current style attribute value.
 * @param string            $style_property_name   The style property name to set.
 * @param string|false|null $style_property_value  The value to set for the style property. With false, null or an
 *                                                 empty string, it removes the style property.
 * @return string The new style attribute value after the specified property has been added, updated or removed.
 */
private function merge_style_property( string $style_attribute_value, string $style_property_name, $style_property_value ): string {
	$style_assignments    = explode( ';', $style_attribute_value );
	$result               = array();
	$style_property_value = ! empty( $style_property_value ) ? rtrim( trim( $style_property_value ), ';' ) : null;
	$new_style_property   = $style_property_value ? $style_property_name . ':' . $style_property_value . ';' : '';

	// Generates an array with all the properties but the modified one.
	foreach ( $style_assignments as $style_assignment ) {
		if ( empty( trim( $style_assignment ) ) ) {
			continue;
		}
		list( $name, $value ) = explode( ':', $style_assignment );
		if ( trim( $name ) !== $style_property_name ) {
			$result[] = trim( $name ) . ':' . trim( $value ) . ';';
		}
	}

	// Adds the new/modified property at the end of the list.
	$result[] = $new_style_property;

	return implode( '', $result );
}

/**
 * Processes the `data-wp-text` directive.
 *
 * It updates the inner content of the current HTML element based on the
 * evaluation of its associated reference.
 *
 * @since 6.5.0
 *
 * @param WP_Interactivity_API_Directives_Processor $p               The directives processor instance.
 * @param string                                    $mode            Whether the processing is entering or exiting the tag.
 */
private function data_wp_text_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) {
	if ( 'enter' === $mode ) {
		$attribute_value = $p->get_attribute( 'data-wp-text' );
		$result          = $this->evaluate( $attribute_value );

		/*
		 * Follows the same logic as Preact in the client and only changes the
		 * content if the value is a string or a number. Otherwise, it removes the
		 * content.
		 */
		if ( is_string( $result ) || is_numeric( $result ) ) {
			$p->set_content_between_balanced_tags( esc_html( $result ) );
		} else {
			$p->set_content_between_balanced_tags( '' );

Changelog

VersionDescription
6.5.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.