{"id":5643,"date":"2026-02-12T20:45:00","date_gmt":"2026-02-13T01:45:00","guid":{"rendered":"https:\/\/chubes.net\/?documentation=wp_html_open_elements"},"modified":"2026-03-13T03:28:29","modified_gmt":"2026-03-13T07:28:29","slug":"wp_html_open_elements","status":"publish","type":"documentation","link":"https:\/\/chubes.net\/docs\/wordpress-core\/html-api\/wp_html_open_elements\/","title":{"rendered":"WP_HTML_Open_Elements"},"content":{"rendered":"<p>Stack of open elements used during HTML parsing for tree construction.<\/p><p><strong>Source:<\/strong> <code>wp-includes\/html-api\/class-wp-html-open-elements.php<\/code><br \/>\n<strong>Since:<\/strong> 6.4.0<br \/>\n<strong>Access:<\/strong> private<\/p><hr class=\"wp-block-separator\"\/><h2 class=\"wp-block-heading\">Properties<\/h2><figure class=\"wp-block-table\"><table><thead><tr><th>Property<\/th><th>Type<\/th><th>Visibility<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$stack<\/code><\/td><td>WP_HTML_Token[]<\/td><td>public<\/td><td>Array of open element tokens<\/td><\/tr><\/tbody><\/table><\/figure><hr class=\"wp-block-separator\"\/><h2 class=\"wp-block-heading\">Methods<\/h2><h3 class=\"wp-block-heading\">Stack Access<\/h3><h4 class=\"wp-block-heading\">at()<\/h4><p>Returns the token at the nth position from the top.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function at( int $nth ): ?WP_HTML_Token<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$nth<\/code><\/td><td>int<\/td><td>1-based position (1 = top)<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> Token at position or <code>null<\/code>.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">current_node()<\/h4><p>Returns the most recently added element.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function current_node(): ?WP_HTML_Token<\/code><\/pre><\/div><p><strong>Returns:<\/strong> Last token on stack or <code>null<\/code>.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">current_node_is()<\/h4><p>Checks if the current node matches a name or type.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function current_node_is( string $identity ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$identity<\/code><\/td><td>string<\/td><td>Tag name or type (e.g., <code>&quot;DIV&quot;<\/code>, <code>&quot;#text&quot;<\/code>, <code>&quot;#tag&quot;<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if current node matches.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">count()<\/h4><p>Returns the number of elements on the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function count(): int<\/code><\/pre><\/div><p><strong>Returns:<\/strong> Stack size.<\/p><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Stack Searching<\/h3><h4 class=\"wp-block-heading\">contains()<\/h4><p>Checks if a node name is in the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function contains( string $node_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$node_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if found.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">contains_node()<\/h4><p>Checks if a specific token is in the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function contains_node( WP_HTML_Token $token ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$token<\/code><\/td><td>WP_HTML_Token<\/td><td>Token to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if found.<\/p><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Scope Checking<\/h3><h4 class=\"wp-block-heading\">has_element_in_scope()<\/h4><p>Checks if an element is in general scope.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_scope( string $tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if in scope.<\/p><p>Scope terminators: APPLET, CAPTION, HTML, TABLE, TD, TH, MARQUEE, OBJECT, TEMPLATE, MathML elements, SVG elements.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_element_in_list_item_scope()<\/h4><p>Checks if an element is in list item scope.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_list_item_scope( string $tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if in list item scope.<\/p><p>Additional terminators beyond general scope: BUTTON, OL, UL.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_element_in_button_scope()<\/h4><p>Checks if an element is in button scope.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_button_scope( string $tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if in button scope.<\/p><p>Additional terminator: BUTTON.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_element_in_table_scope()<\/h4><p>Checks if an element is in table scope.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_table_scope( string $tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if in table scope.<\/p><p>Terminators: HTML, TABLE, TEMPLATE only.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_element_in_select_scope()<\/h4><p>Checks if an element is in select scope.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_select_scope( string $tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if in select scope.<\/p><p>Only OPTION and OPTGROUP do NOT terminate scope.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_p_in_button_scope()<\/h4><p>Checks if a P element is in button scope (optimized).<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_p_in_button_scope(): bool<\/code><\/pre><\/div><p><strong>Returns:<\/strong> <code>true<\/code> if P in button scope.<\/p><p>This is pre-calculated for performance.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">has_element_in_specific_scope()<\/h4><p>General scope check with custom termination list.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function has_element_in_specific_scope( string $tag_name, $termination_list ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$tag_name<\/code><\/td><td>string<\/td><td>Tag name to find<\/td><\/tr><tr><td><code>$termination_list<\/code><\/td><td>string[]<\/td><td>Elements that terminate the search<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if element found before terminator.<\/p><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Stack Modification<\/h3><h4 class=\"wp-block-heading\">push()<\/h4><p>Pushes an element onto the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function push( WP_HTML_Token $stack_item ): void<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$stack_item<\/code><\/td><td>WP_HTML_Token<\/td><td>Token to add<\/td><\/tr><\/tbody><\/table><\/figure><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">pop()<\/h4><p>Pops the top element from the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function pop(): bool<\/code><\/pre><\/div><p><strong>Returns:<\/strong> <code>true<\/code> if element was popped.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">pop_until()<\/h4><p>Pops elements until a specific tag is popped.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function pop_until( string $html_tag_name ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$html_tag_name<\/code><\/td><td>string<\/td><td>Tag name to pop to<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if tag was found and popped.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">remove_node()<\/h4><p>Removes a specific node from anywhere in the stack.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function remove_node( WP_HTML_Token $token ): bool<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$token<\/code><\/td><td>WP_HTML_Token<\/td><td>Token to remove<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Returns:<\/strong> <code>true<\/code> if removed.<\/p><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Table Context Clearing<\/h3><h4 class=\"wp-block-heading\">clear_to_table_context()<\/h4><p>Clears stack to TABLE, TEMPLATE, or HTML element.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function clear_to_table_context(): void<\/code><\/pre><\/div><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">clear_to_table_body_context()<\/h4><p>Clears stack to TBODY, TFOOT, THEAD, TEMPLATE, or HTML element.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function clear_to_table_body_context(): void<\/code><\/pre><\/div><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">clear_to_table_row_context()<\/h4><p>Clears stack to TR, TEMPLATE, or HTML element.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function clear_to_table_row_context(): void<\/code><\/pre><\/div><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Stack Traversal<\/h3><h4 class=\"wp-block-heading\">walk_down()<\/h4><p>Generator that walks from first added (top) to last added (bottom).<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function walk_down()<\/code><\/pre><\/div><p><strong>Example:<\/strong><\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">\/\/ For &#039;&lt;em&gt;&lt;strong&gt;&lt;a&gt;text&#039;\nforeach ( $stack-&gt;walk_down() as $node ) {\n    echo $node-&gt;node_name . &#039; -&gt; &#039;;\n}\n\/\/ Output: EM -&gt; STRONG -&gt; A -&gt;<\/code><\/pre><\/div><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">walk_up()<\/h4><p>Generator that walks from last added (bottom) to first added (top).<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function walk_up( ?WP_HTML_Token $above_this_node = null )<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$above_this_node<\/code><\/td><td>WP_HTML_Token|null<\/td><td>Start above this node<\/td><\/tr><\/tbody><\/table><\/figure><p><strong>Example:<\/strong><\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">\/\/ For &#039;&lt;em&gt;&lt;strong&gt;&lt;a&gt;text&#039;\nforeach ( $stack-&gt;walk_up() as $node ) {\n    echo $node-&gt;node_name . &#039; -&gt; &#039;;\n}\n\/\/ Output: A -&gt; STRONG -&gt; EM -&gt;<\/code><\/pre><\/div><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Event Handlers<\/h3><h4 class=\"wp-block-heading\">set_push_handler()<\/h4><p>Sets a callback for when elements are pushed.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function set_push_handler( Closure $handler ): void<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$handler<\/code><\/td><td>Closure<\/td><td>Called with pushed token<\/td><\/tr><\/tbody><\/table><\/figure><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">set_pop_handler()<\/h4><p>Sets a callback for when elements are popped.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function set_pop_handler( Closure $handler ): void<\/code><\/pre><\/div><figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>$handler<\/code><\/td><td>Closure<\/td><td>Called with popped token<\/td><\/tr><\/tbody><\/table><\/figure><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Internal Methods<\/h3><h4 class=\"wp-block-heading\">after_element_push()<\/h4><p>Updates internal state after push.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function after_element_push( WP_HTML_Token $item ): void<\/code><\/pre><\/div><p>Updates <code>has_p_in_button_scope<\/code> cache and calls push handler.<\/p><hr class=\"wp-block-separator\"\/><h4 class=\"wp-block-heading\">after_element_pop()<\/h4><p>Updates internal state after pop.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function after_element_pop( WP_HTML_Token $item ): void<\/code><\/pre><\/div><p>Updates <code>has_p_in_button_scope<\/code> cache and calls pop handler.<\/p><hr class=\"wp-block-separator\"\/><h3 class=\"wp-block-heading\">Security<\/h3><h4 class=\"wp-block-heading\">__wakeup()<\/h4><p>Prevents unserialization.<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function __wakeup()<\/code><\/pre><\/div><p><strong>Throws:<\/strong> <code>LogicException<\/code><\/p><hr class=\"wp-block-separator\"\/><h2 class=\"wp-block-heading\">Scope Termination Reference<\/h2><figure class=\"wp-block-table\"><table><thead><tr><th>Scope Type<\/th><th>Terminating Elements<\/th><\/tr><\/thead><tbody><tr><td>General<\/td><td>APPLET, CAPTION, HTML, TABLE, TD, TH, MARQUEE, OBJECT, TEMPLATE, MathML (mi, mo, mn, ms, mtext, annotation-xml), SVG (foreignObject, desc, title)<\/td><\/tr><tr><td>List Item<\/td><td>General + BUTTON, OL, UL<\/td><\/tr><tr><td>Button<\/td><td>General + BUTTON<\/td><\/tr><tr><td>Table<\/td><td>HTML, TABLE, TEMPLATE<\/td><\/tr><tr><td>Select<\/td><td>Everything except OPTION, OPTGROUP<\/td><\/tr><\/tbody><\/table><\/figure><hr class=\"wp-block-separator\"\/><h2 class=\"wp-block-heading\">Usage Example<\/h2><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$stack = new WP_HTML_Open_Elements();\n\n\/\/ Set up handlers for tracking\n$stack-&gt;set_push_handler( function( $token ) {\n    echo &quot;Opened: {$token-&gt;node_name}n&quot;;\n} );\n\n$stack-&gt;set_pop_handler( function( $token ) {\n    echo &quot;Closed: {$token-&gt;node_name}n&quot;;\n} );\n\n\/\/ Simulate parsing &#039;&lt;div&gt;&lt;p&gt;text&lt;\/p&gt;&lt;\/div&gt;&#039;\n$stack-&gt;push( new WP_HTML_Token( &#039;bk1&#039;, &#039;DIV&#039;, false ) );\n$stack-&gt;push( new WP_HTML_Token( &#039;bk2&#039;, &#039;P&#039;, false ) );\n\n\/\/ Check scope\n$stack-&gt;has_element_in_scope( &#039;P&#039; );     \/\/ true\n$stack-&gt;has_p_in_button_scope();         \/\/ true\n\n\/\/ Pop P\n$stack-&gt;pop();\n\n\/\/ P is no longer in scope\n$stack-&gt;has_element_in_scope( &#039;P&#039; );     \/\/ false<\/code><\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Stack of open elements used during HTML parsing for tree construction. Source: wp-includes\/html-api\/class-wp-html-open-elements.php Since: 6.4.0 Access: private Properties Property Type Visibility Description $stack WP_HTML_Token[] public Array of open element tokens&#8230;<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"footnotes":""},"tags":[],"project":[629],"project_type":[749],"class_list":["post-5643","documentation","type-documentation","status-publish","hentry","project-html-api","project_type-wordpress-reference"],"project_info":{"id":589,"name":"WordPress Core","slug":"wordpress-core"},"project_type_info":{"id":749,"name":"WordPress Reference","slug":"wordpress-reference"},"_links":{"self":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation"}],"about":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/types\/documentation"}],"version-history":[{"count":18,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5643\/revisions"}],"predecessor-version":[{"id":10905,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5643\/revisions\/10905"}],"wp:attachment":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/media?parent=5643"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/tags?post=5643"},{"taxonomy":"project","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project?post=5643"},{"taxonomy":"project_type","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project_type?post=5643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}