WP_Customize_Nav_Menu_Item_Setting::populate_value()protectedWP 4.3.0

Ensure that the value is fully populated with the necessary properties.

Translates some properties added by wp_setup_nav_menu_item() and removes others.

Method of the class: WP_Customize_Nav_Menu_Item_Setting{}

No Hooks.

Return

null. Nothing (null).

Usage

// protected - for code of main (parent) or child class
$result = $this->populate_value();

Notes

Changelog

Since 4.3.0 Introduced.

WP_Customize_Nav_Menu_Item_Setting::populate_value() code WP 6.5.2

protected function populate_value() {
	if ( ! is_array( $this->value ) ) {
		return;
	}

	if ( isset( $this->value['menu_order'] ) ) {
		$this->value['position'] = $this->value['menu_order'];
		unset( $this->value['menu_order'] );
	}
	if ( isset( $this->value['post_status'] ) ) {
		$this->value['status'] = $this->value['post_status'];
		unset( $this->value['post_status'] );
	}

	if ( ! isset( $this->value['original_title'] ) ) {
		$this->value['original_title'] = $this->get_original_title( (object) $this->value );
	}

	if ( ! isset( $this->value['nav_menu_term_id'] ) && $this->post_id > 0 ) {
		$menus = wp_get_post_terms(
			$this->post_id,
			WP_Customize_Nav_Menu_Setting::TAXONOMY,
			array(
				'fields' => 'ids',
			)
		);
		if ( ! empty( $menus ) ) {
			$this->value['nav_menu_term_id'] = array_shift( $menus );
		} else {
			$this->value['nav_menu_term_id'] = 0;
		}
	}

	foreach ( array( 'object_id', 'menu_item_parent', 'nav_menu_term_id' ) as $key ) {
		if ( ! is_int( $this->value[ $key ] ) ) {
			$this->value[ $key ] = (int) $this->value[ $key ];
		}
	}
	foreach ( array( 'classes', 'xfn' ) as $key ) {
		if ( is_array( $this->value[ $key ] ) ) {
			$this->value[ $key ] = implode( ' ', $this->value[ $key ] );
		}
	}

	if ( ! isset( $this->value['title'] ) ) {
		$this->value['title'] = '';
	}

	if ( ! isset( $this->value['_invalid'] ) ) {
		$this->value['_invalid'] = false;
		$is_known_invalid        = (
			( ( 'post_type' === $this->value['type'] || 'post_type_archive' === $this->value['type'] ) && ! post_type_exists( $this->value['object'] ) )
			||
			( 'taxonomy' === $this->value['type'] && ! taxonomy_exists( $this->value['object'] ) )
		);
		if ( $is_known_invalid ) {
			$this->value['_invalid'] = true;
		}
	}

	// Remove remaining properties available on a setup nav_menu_item post object which aren't relevant to the setting value.
	$irrelevant_properties = array(
		'ID',
		'comment_count',
		'comment_status',
		'db_id',
		'filter',
		'guid',
		'ping_status',
		'pinged',
		'post_author',
		'post_content',
		'post_content_filtered',
		'post_date',
		'post_date_gmt',
		'post_excerpt',
		'post_mime_type',
		'post_modified',
		'post_modified_gmt',
		'post_name',
		'post_parent',
		'post_password',
		'post_title',
		'post_type',
		'to_ping',
	);
	foreach ( $irrelevant_properties as $property ) {
		unset( $this->value[ $property ] );
	}
}