WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Как при создании нового меню добавить в него пункты

Задача: нужно добавить в меню при его создании в админке все рубрики сайта, учитывая их иерархию, а также учитывая, что меню назначена область меню "Подвал сайта" (footer).

add_action( 'wp_create_nav_menu', function ( $term_id ) {

	// Если вручную что-то было добавлено в меню - прерываем процесс
	if ( ! empty( $_REQUEST['menu-item'] ) ) {
		return;
	}

	// Если не выбрана локация footer - прерываем процесс
	if ( ! isset( $_REQUEST['menu-locations']['footer'] ) ) {
		return;
	}

	// Получаем рубрики (или что угодно)
	$items = get_categories( [ 'hide_empty' => false ] );

	// Если нет терминов - прерываем процесс
	if ( ! $items ) {
		return;
	}

	foreach ( $items as $key => $term ) {
		$result = wp_update_nav_menu_item( $term_id, 0, [
			'menu-item-type'      => 'taxonomy',
			'menu-item-object'    => $term->taxonomy,
			'menu-item-object-id' => $term->term_id,
		] );

		if ( is_wp_error( $result ) ) {
			error_log( print_r( $result->get_error_message(), true ) );
		} else {
			$items[ $key ]->db_id = $result;
		}
	}

	// Находит значение родительского ID пункта меню термина по родителю термина
	$get_parent = static function ( WP_Term $term ) use ( $items ) {
		foreach ( $items as $_term ) {
			if ( $term->parent === $_term->term_id ) {
				return $_term->db_id;
			}
		}

		return 0;
	};

	// Присваиваем родителя в рамках меню
	foreach ( $items as $key => $term ) {
		$parent = $get_parent( $term );

		wp_update_post( wp_slash( [
			'ID'          => $term->db_id,
			'post_parent' => $parent,
			'meta_input'  => [
				'_menu_item_menu_item_parent' => $parent,
			],
		] ) );
	}

} );
campusboy 3860youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
1 коммент
    Войти