diff --git a/astra-child-hoponhopoff/inc/nav-walker.php b/astra-child-hoponhopoff/inc/nav-walker.php index 1f3ea03..9a5fb38 100644 --- a/astra-child-hoponhopoff/inc/nav-walker.php +++ b/astra-child-hoponhopoff/inc/nav-walker.php @@ -54,5 +54,12 @@ function hoho_nav_fallback() { echo ''; } diff --git a/viator-collector/includes/class-vc-menu.php b/viator-collector/includes/class-vc-menu.php new file mode 100644 index 0000000..6eb3023 --- /dev/null +++ b/viator-collector/includes/class-vc-menu.php @@ -0,0 +1,88 @@ +theme_location ) || self::LOCATION !== $args->theme_location ) { + return $items; + } + $order = count( $items ); + $extra = self::items(); + foreach ( $extra as $item ) { + $item->menu_order = ++$order; + } + return array_merge( $items, $extra ); + } + + /** + * Menu-item objects for the walker. The theme walker turns a parent with + * children into a toggle button (no link), so a region's dropdown starts + * with an "All of {region}" link to the region page itself. + * + * @return object[] + */ + public static function items() { + $items = array(); + $n = 0; + foreach ( VC_Structure::get() as $region ) { + $term = $region['term_id'] ? get_term( (int) $region['term_id'], 'viator_destination' ) : null; + if ( ! $term instanceof WP_Term ) { + continue; + } + $region_url = get_term_link( $term ); + if ( is_wp_error( $region_url ) ) { + continue; + } + $parent = self::item( ++$n, 0, $term->name, $region_url ); + $items[] = $parent; + if ( ! $region['cities'] ) { + continue; + } + /* translators: %s: region name. */ + $items[] = self::item( ++$n, $parent->db_id, sprintf( __( 'All of %s', 'viator-collector' ), $term->name ), $region_url ); + foreach ( $region['cities'] as $city ) { + $items[] = self::item( ++$n, $parent->db_id, $city['name'], home_url( '/' . $city['slug'] . '/' ) ); + } + } + return $items; + } + + private static function item( $n, $parent_id, $title, $url ) { + $id = -1000 - $n; + $item = new stdClass(); + + $item->ID = $id; + $item->db_id = $id; + $item->menu_item_parent = (string) $parent_id; + $item->object_id = (string) $id; + $item->object = 'custom'; + $item->type = 'custom'; + $item->type_label = ''; + $item->title = $title; + $item->url = $url; + $item->target = ''; + $item->attr_title = ''; + $item->description = ''; + $item->classes = array( 'menu-item', 'vc-structure-item' ); + $item->xfn = ''; + $item->status = 'publish'; + $item->post_parent = 0; + $item->menu_order = $n; + $item->current = false; + $item->current_item_ancestor = false; + $item->current_item_parent = false; + + return $item; + } +} diff --git a/viator-collector/includes/class-vc-plugin.php b/viator-collector/includes/class-vc-plugin.php index e97f148..b067e0f 100644 --- a/viator-collector/includes/class-vc-plugin.php +++ b/viator-collector/includes/class-vc-plugin.php @@ -21,6 +21,7 @@ final class VC_Plugin { VC_Settings::init(); VC_Structure_Admin::init(); VC_Routing::init(); + VC_Menu::init(); VC_Cron::init(); VC_Display::init(); VC_Sections::init(); @@ -39,6 +40,7 @@ final class VC_Plugin { 'includes/class-vc-settings.php', 'includes/class-vc-structure-admin.php', 'includes/class-vc-routing.php', + 'includes/class-vc-menu.php', 'includes/class-vc-display.php', 'includes/class-vc-sections.php', );