WordPress Version: 6.1
/**
* Prints out option HTML elements for the page parents drop-down.
*
* @since 1.5.0
* @since 4.4.0 `$post` argument was added.
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int $default_page Optional. The default page ID to be pre-selected. Default 0.
* @param int $parent_page Optional. The parent page ID. Default 0.
* @param int $level Optional. Page depth level. Default 0.
* @param int|WP_Post $post Post ID or WP_Post object.
* @return void|false Void on success, false if the page has no children.
*/
function parent_dropdown($default_page = 0, $parent_page = 0, $level = 0, $post = null)
{
global $wpdb;
$post = get_post($post);
$items = $wpdb->get_results($wpdb->prepare("SELECT ID, post_parent, post_title\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_parent = %d AND post_type = 'page'\n\t\t\tORDER BY menu_order", $parent_page));
if ($items) {
foreach ($items as $item) {
// A page cannot be its own parent.
if ($post && $post->ID && (int) $item->ID === $post->ID) {
continue;
}
$pad = str_repeat(' ', $level * 3);
$selected = selected($default_page, $item->ID, false);
echo "\n\t<option class='level-{$level}' value='{$item->ID}' {$selected}>{$pad} " . esc_html($item->post_title) . '</option>';
parent_dropdown($default_page, $item->ID, $level + 1);
}
} else {
return false;
}
}