WP_HTML_Tag_Processor::class_listpublicWP 6.4.0

Generator for a foreach loop to step through each class name for the matched tag.

This generator function is designed to be used inside a "foreach" loop.

Example:

$p = new WP_HTML_Tag_Processor( "<div class='free <egg<\tlang-en'>" );
$p->next_tag();
foreach ( $p->class_list() as $class_name ) {
	echo "{$class_name} ";
}
// Outputs: "free <egg> lang-en "

Метод класса: WP_HTML_Tag_Processor{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$WP_HTML_Tag_Processor = new WP_HTML_Tag_Processor();
$WP_HTML_Tag_Processor->class_list();

Список изменений

С версии 6.4.0 Введена.

Код WP_HTML_Tag_Processor::class_list() WP 6.9

public function class_list() {
	if ( self::STATE_MATCHED_TAG !== $this->parser_state ) {
		return;
	}

	/** @var string $class contains the string value of the class attribute, with character references decoded. */
	$class = $this->get_attribute( 'class' );

	if ( ! is_string( $class ) ) {
		return;
	}

	$seen = array();

	$is_quirks = self::QUIRKS_MODE === $this->compat_mode;

	$at = 0;
	while ( $at < strlen( $class ) ) {
		// Skip past any initial boundary characters.
		$at += strspn( $class, " \t\f\r\n", $at );
		if ( $at >= strlen( $class ) ) {
			return;
		}

		// Find the byte length until the next boundary.
		$length = strcspn( $class, " \t\f\r\n", $at );
		if ( 0 === $length ) {
			return;
		}

		$name = str_replace( "\x00", "\u{FFFD}", substr( $class, $at, $length ) );
		if ( $is_quirks ) {
			$name = strtolower( $name );
		}
		$at += $length;

		/*
		 * It's expected that the number of class names for a given tag is relatively small.
		 * Given this, it is probably faster overall to scan an array for a value rather
		 * than to use the class name as a key and check if it's a key of $seen.
		 */
		if ( in_array( $name, $seen, true ) ) {
			continue;
		}

		$seen[] = $name;
		yield $name;
	}
}