Walker_PageDropdown::start_el( string $output, WP_Post $data_object, int $depth, array $args = array(), int $current_object_id )

Starts the element output.


See also


Used to append additional content. Passed by reference.
Page data object.
Depth of page in reference to parent pages.
Used for padding. Default 0.
Uses 'selected' argument for selected page to set selected HTML attribute for option element. Uses 'value_field' argument to fill "value" attribute.
See wp_dropdown_pages() .
More Arguments from wp_dropdown_pages( … $args )Array or string of arguments to retrieve pages.
  • child_of int
    Page ID to return child and grandchild pages of. Note: The value of $hierarchical has no bearing on whether $child_of returns hierarchical results. Default 0, or no restriction.
  • sort_order string
    How to sort retrieved pages. Accepts 'ASC', 'DESC'. Default 'ASC'.
  • sort_column string
    What columns to sort pages by, comma-separated. Accepts 'post_author', 'post_date', 'post_title', 'post_name', 'post_modified', 'menu_order', 'post_modified_gmt', 'post_parent', 'ID', 'rand', 'comment*count'.
    'post*' can be omitted for any values that start with it.
    Default 'post_title'.
  • hierarchical bool
    Whether to return pages hierarchically. If false in conjunction with $child_of also being false, both arguments will be disregarded.
    Default true.
  • exclude int[]
    Array of page IDs to exclude.
  • include int[]
    Array of page IDs to include. Cannot be used with $child_of, $parent, $exclude, $meta_key, $meta_value, or $hierarchical.
  • meta_key string
    Only include pages with this meta key.
  • meta_value string
    Only include pages with this meta value. Requires $meta_key.
  • authors string
    A comma-separated list of author IDs.
  • parent int
    Page ID to return direct children of. Default -1, or no restriction.
  • exclude_tree string|int[]
    Comma-separated string or array of page IDs to exclude.
  • number int
    The number of pages to return. Default 0, or all pages.
  • offset int
    The number of pages to skip before returning. Requires $number.
    Default 0.
  • post_type string
    The post type to query. Default 'page'.
  • post_status string|array
    A comma-separated list or array of post statuses to include.
    Default 'publish'.


ID of the current page. Default 0.


public function start_el( &$output, $data_object, $depth = 0, $args = array(), $current_object_id = 0 ) {
	// Restores the more descriptive, specific name for use within this method.
	$page = $data_object;

	$pad = str_repeat( ' ', $depth * 3 );

	if ( ! isset( $args['value_field'] ) || ! isset( $page->{$args['value_field']} ) ) {
		$args['value_field'] = 'ID';

	$output .= "\t<option class=\"level-$depth\" value=\"" . esc_attr( $page->{$args['value_field']} ) . '"';
	if ( $page->ID === (int) $args['selected'] ) {
		$output .= ' selected="selected"';
	$output .= '>';

	$title = $page->post_title;
	if ( '' === $title ) {
		/* translators: %d: ID of a post. */
		$title = sprintf( __( '#%d (no title)' ), $page->ID );

	 * Filters the page title when creating an HTML drop-down list of pages.
	 * @since 3.1.0
	 * @param string  $title Page title.
	 * @param WP_Post $page  Page data object.
	$title = apply_filters( 'list_pages', $title, $page );

	$output .= $pad . esc_html( $title );
	$output .= "</option>\n";


apply_filters( ‘list_pages’, string $title, WP_Post $page )

Filters the page title when creating an HTML drop-down list of pages.


5.9.0Renamed $page to $data_object and $id to $current_object_id to match parent class for PHP 8 named parameter support.

User Contributed Notes

  1. Skip to note 2 content

    <option selected=”selected”> might not work properly when ‘value_field’ parameter value is not ‘ID’,
    because the line 66 says:

    if ( $page->ID == $args['selected'] )

    This line should be modified, like:

    if ( $page->{$args['value_field']} == $args['selected'] )

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