wp_print_theme_file_tree

The timeline below displays how wordpress function wp_print_theme_file_tree has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.4

/**
 * Outputs the formatted file list for the theme file editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @global string $relative_file Name of the file being edited relative to the
 *                               theme directory.
 * @global string $stylesheet    The stylesheet name of the theme being edited.
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            ++$index;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text">
					<?php 
            /* translators: Hidden accessibility text. */
            _e('folder');
            ?>
				</span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && wp_basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}

WordPress Version: 6.2

/**
 * Outputs the formatted file list for the theme file editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @global string $relative_file Name of the file being edited relative to the
 *                               theme directory.
 * @global string $stylesheet    The stylesheet name of the theme being edited.
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            $index++;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text">
					<?php 
            /* translators: Hidden accessibility text. */
            _e('folder');
            ?>
				</span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && wp_basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}

WordPress Version: 5.9

/**
 * Outputs the formatted file list for the theme file editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @global string $relative_file Name of the file being edited relative to the
 *                               theme directory.
 * @global string $stylesheet    The stylesheet name of the theme being edited.
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            $index++;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text"><?php 
            _e('folder');
            ?></span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && wp_basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}

WordPress Version: 5.2

/**
 * Outputs the formatted file list for the theme editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @global string $relative_file Name of the file being edited relative to the
 *                               theme directory.
 * @global string $stylesheet    The stylesheet name of the theme being edited.
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            $index++;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text"><?php 
            _e('folder');
            ?></span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && wp_basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}

WordPress Version: 5.1

/**
 * Outputs the formatted file list for the theme editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @global string $relative_file Name of the file being edited relative to the
 *                               theme directory.
 * @global string $stylesheet    The stylesheet name of the theme being edited.
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            $index++;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text"><?php 
            _e('folder');
            ?></span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}

WordPress Version: 4.9

/**
 * Outputs the formatted file list for the Theme Editor.
 *
 * @since 4.9.0
 * @access private
 *
 * @param array|string $tree  List of file/folder paths, or filename.
 * @param int          $level The aria-level for the current iteration.
 * @param int          $size  The aria-setsize for the current iteration.
 * @param int          $index The aria-posinset for the current iteration.
 */
function wp_print_theme_file_tree($tree, $level = 2, $size = 1, $index = 1)
{
    global $relative_file, $stylesheet;
    if (is_array($tree)) {
        $index = 0;
        $size = count($tree);
        foreach ($tree as $label => $theme_file) {
            $index++;
            if (!is_array($theme_file)) {
                wp_print_theme_file_tree($theme_file, $level, $index, $size);
                continue;
            }
            ?>
			<li role="treeitem" aria-expanded="true" tabindex="-1"
				aria-level="<?php 
            echo esc_attr($level);
            ?>"
				aria-setsize="<?php 
            echo esc_attr($size);
            ?>"
				aria-posinset="<?php 
            echo esc_attr($index);
            ?>">
				<span class="folder-label"><?php 
            echo esc_html($label);
            ?> <span class="screen-reader-text"><?php 
            _e('folder');
            ?></span><span aria-hidden="true" class="icon"></span></span>
				<ul role="group" class="tree-folder"><?php 
            wp_print_theme_file_tree($theme_file, $level + 1, $index, $size);
            ?></ul>
			</li>
			<?php 
        }
    } else {
        $filename = $tree;
        $url = add_query_arg(array('file' => rawurlencode($tree), 'theme' => rawurlencode($stylesheet)), self_admin_url('theme-editor.php'));
        ?>
		<li role="none" class="<?php 
        echo esc_attr(($relative_file === $filename) ? 'current-file' : '');
        ?>">
			<a role="treeitem" tabindex="<?php 
        echo esc_attr(($relative_file === $filename) ? '0' : '-1');
        ?>"
				href="<?php 
        echo esc_url($url);
        ?>"
				aria-level="<?php 
        echo esc_attr($level);
        ?>"
				aria-setsize="<?php 
        echo esc_attr($size);
        ?>"
				aria-posinset="<?php 
        echo esc_attr($index);
        ?>">
				<?php 
        $file_description = esc_html(get_file_description($filename));
        if ($file_description !== $filename && basename($filename) !== $file_description) {
            $file_description .= '<br /><span class="nonessential">(' . esc_html($filename) . ')</span>';
        }
        if ($relative_file === $filename) {
            echo '<span class="notice notice-info">' . $file_description . '</span>';
        } else {
            echo $file_description;
        }
        ?>
			</a>
		</li>
		<?php 
    }
}