function cpt_navmenu_metabox_content() { $post_types = get_post_types(array('show_in_nav_menus' => true, 'has_archive' => true), 'object'); if ($post_types) { foreach ($post_types as &$post_type) { $post_type->classes = array(); $post_type->type = $post_type->name; $post_type->object_id = $post_type->name; $post_type->title = $post_type->labels->name; $post_type->object = 'cpt-archive'; $post_type->menu_item_parent = ''; $post_type->url = ''; $post_type->target = ''; $post_type->attr_title = ''; $post_type->xfn = ''; $post_type->db_id = ''; } $walker = new Walker_Nav_Menu_Checklist(array()); echo '<div id="cpt-archive" class="posttypediv">'; echo '<div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active">'; echo '<ul id="ctp-archive-checklist" class="categorychecklist form-no-clear">'; echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $post_types), 0, (object) array('walker' => $walker)); echo '</ul>'; echo '</div><!-- /.tabs-panel -->'; echo '</div>'; echo '<p class="button-controls">'; echo '<span class="add-to-menu">'; //echo '<img class="waiting" src="' . esc_url( admin_url( 'images/wpspin_light.gif' ) ) . '" alt="" />'; echo '<input type="submit" class="button-secondary submit-add-to-menu" value="' . __('Add to Menu', 'allstruck') . '" name="add-ctp-archive-menu-item" id="submit-cpt-archive" />'; echo '</span>'; echo '</p>'; } }
/** * Ajax callback for our menu items * * @wordpress-action wp_ajax_buggypress_add_to_menu * @return void Exits the program on completion */ public function ajax_add_to_menu() { check_ajax_referer('buggypress-menu', 'buggypress_nonce'); if (empty($_POST['menu_items'])) { die('-1'); } require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; $menu_items = $_POST['menu_items']; $item_ids = array(); foreach ($menu_items as $item) { $item_ids[] = $this->add_menu_item($item); } if (is_wp_error($item_ids)) { die('-1'); } // Set up menu items $output_menu_items = array(); foreach ($item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_obj->type_label = 'BuggyPress'; $output_menu_items[] = $menu_obj; } } // build the HTML output if (!empty($output_menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit()); echo walk_nav_menu_tree($output_menu_items, 0, (object) $args); } exit; }
/** * Build and populate the BuddyPress accordion on Appearance > Menus. * * @since cjtheme 1.5.1 * * @global $nav_menu_selected_id */ function cjtheme_admin_do_wp_nav_menu_meta_box() { global $nav_menu_selected_id; $walker = new cjtheme_Walker_Nav_Menu_Checklist(false); $args = array('walker' => $walker); $post_type_name = 'cjtheme'; $tabs = array(); $menu_items = array(); $menu_items[] = array('name' => __('title', 'cjtheme'), 'slug' => 'title', 'link' => '#', 'class' => 'title'); $menu_items[] = array('name' => __('Login', 'cjtheme'), 'slug' => 'login', 'link' => '#'); $menu_items[] = array('name' => __('Logout', 'cjtheme'), 'slug' => 'logout', 'link' => wp_logout_url(site_url())); $menu_items[] = array('name' => __('Register', 'cjtheme'), 'slug' => 'register', 'link' => "#"); $menu_items[] = array('name' => __('Instant Search', 'cjtheme'), 'slug' => 'instant-search', 'link' => "#instant-search"); $menu_items = apply_filters('cjtheme_nav_menu_items', $menu_items); $page_args = array(); if (!empty($menu_items)) { foreach ($menu_items as $item) { $item_name = ''; // Remove <span>number</span> $item_name = preg_replace('/([.0-9]+)/', '', $item['name']); $item_name = trim(strip_tags($item_name)); $page_args[$item['slug']] = (object) array('ID' => -1, 'post_title' => $item_name, 'post_author' => 0, 'post_date' => 0, 'post_excerpt' => $item['slug'], 'post_type' => 'page', 'post_status' => 'publish', 'comment_status' => 'closed', 'guid' => $item['link']); } } else { _e('No items available here for the moment', 'cjtheme'); return; } $tabs['pages'] = $page_args; ?> <div id="cjtheme-menu" class="posttypediv"> <div id="tabs-panel-posttype-<?php echo $post_type_name; ?> -loggedin" class="tabs-panel tabs-panel-active"> <ul id="cjtheme-menu-checklist-loggedin" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $tabs['pages']), 0, (object) $args); ?> </ul> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php if (function_exists('wp_nav_menu_disabled_check')) { wp_nav_menu_disabled_check($nav_menu_selected_id); } ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu', 'cjtheme'); ?> " name="add-custom-menu-item" id="submit-cjtheme-menu" /> <span class="spinner"></span> </span> </p> </div><!-- /#cjtheme-menu --> <?php }
/** * @return void */ public function show_selected_languages() { $menu_items = $this->data->get_ajax_menu_items(); if (empty($menu_items)) { wp_send_json_error(); } // Needed for the walker. require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; $data = walk_nav_menu_tree($menu_items, 0, (object) array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit())); wp_send_json_success($data); }
/** * @return void */ public function show_selected_languages() { $menu_items = $this->data->get_ajax_menu_items(); if (empty($menu_items)) { die(-1); } // Needed for the walker require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); exit; }
/** * Archives Menu * * @param mixed $object Current object. * @param array $metabox Box settings. */ public static function archives_meta_box($object, $metabox) { global $nav_menu_selected_id; if (empty(static::$post_types)) { echo '<p>' . __('No items.') . '</p>'; return; } $walker = new \Walker_Nav_Menu_Checklist([]); ?> <div id="<?php echo static::$obj_archive; ?> " class="<?php echo static::$obj_archive; ?> div"> <div id="tabs-panel-<?php echo static::$obj_archive; ?> " class="tabs-panel tabs-panel-active"> <ul id="<?php echo static::$obj_archive; ?> -checklist" class="categorychecklist form-no-clear"><?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', static::$post_types), 0, (object) ['walker' => $walker]); ?> </ul> </div><!-- /.tabs-panel --> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php wp_nav_menu_disabled_check($nav_menu_selected_id); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?> " name="add-<?php echo static::$obj_archive; ?> -menu-item" id="submit-<?php echo static::$obj_archive; ?> " /> <span class="spinner"></span> </span> </p> <?php }
public function callback($params) { global $_nav_menu_placeholder, $nav_menu_selected_id; $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; /* get custom post types with archive support */ $args = array('show_in_nav_menus' => true, 'has_archive' => true); $post_types = Post_Type::find($args, 'object'); /* hydrate the necessary object properties for the walker */ foreach ($post_types as &$post_type) { $post_type->classes = array(); $post_type->type = $post_type->name; $post_type->object_id = $post_type->name; $post_type->title = $post_type->labels->name . ' ' . __('Archive', 'default'); $post_type->object = 'cpt-archive'; $post_type->menu_item_parent = null; $post_type->url = null; $post_type->xfn = null; $post_type->db_id = null; $post_type->target = null; $post_type->attr_title = null; } $walker = new \Walker_Nav_Menu_Checklist(array()); ?> <div id="cpt-archive" class="posttypediv"> <div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active"> <ul id="ctp-archive-checklist" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $post_types), 0, (object) array('walker' => $walker)); ?> </ul> </div> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php wp_nav_menu_disabled_check($nav_menu_selected_id); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?> " name="add-ctp-archive-menu-item" id="submit-cpt-archive" /> <span class="spinner"></span> </span> </p> <?php }
function wp_nav_menu_cpt_archives_meta_box() { global $nav_menu_selected_id; /* get custom post types with archive support */ $post_types = get_post_types(array('show_in_nav_menus' => true, 'has_archive' => true), 'object'); /* hydrate the necessary object properties for the walker */ foreach ($post_types as &$post_type) { $post_type->classes = array(); $post_type->type = $post_type->name; $post_type->object_id = $post_type->name; $post_type->title = $post_type->labels->name; $post_type->object = 'custom'; $post_type->menu_item_parent = 0; $post_type->url = 0; $post_type->target = 0; $post_type->attr_title = 0; $post_type->xfn = 0; $post_type->db_id = 0; } $walker = new Walker_Nav_Menu_Checklist(array()); ?> <div id="custom" class="posttypediv"> <div id="tabs-panel-custom" class="tabs-panel tabs-panel-active"> <ul id="ctp-archive-checklist" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $post_types), 0, (object) array('walker' => $walker)); ?> </ul> </div><!-- /.tabs-panel --> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php disabled($nav_menu_selected_id, 0); ?> class="button-secondary right submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?> " name="add-ctp-archive-menu-item" id="submit-custom" /> <span class="spinner"></span> </span> </p> </div> <?php }
public function post_type_archive_meta_box() { $post_types = get_post_types(array('show_in_nav_menus' => true, 'has_archive' => true), 'object'); if ($post_types) { $items = array(); $loop_index = 999999; foreach ($post_types as $post_type) { $item = new stdClass(); $loop_index++; $item->object_id = $loop_index; $item->db_id = 0; $item->object = 'post_type_' . $post_type->query_var; $item->menu_item_parent = 0; $item->type = 'custom'; $item->title = $post_type->labels->name; $item->url = get_post_type_archive_link($post_type->query_var); $item->target = ''; $item->attr_title = ''; $item->classes = array(); $item->xfn = ''; $items[] = $item; } $walker = new Walker_Nav_Menu_Checklist(array()); $s = '<div id="posttype-archive" class="posttypediv">'; $s .= '<div id="tabs-panel-posttype-archive" class="tabs-panel tabs-panel-active">'; $s .= '<ul id="posttype-archive-checklist" class="categorychecklist form-no-clear">'; $s .= walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $items), 0, (object) array('walker' => $walker)); $s .= '</ul>'; $s .= '</div>'; $s .= '</div>'; $s .= '<p class="button-controls">'; $s .= '<span class="add-to-menu">'; $s .= '<input type="submit"' . disabled(1, 0) . ' class="button-secondary submit-add-to-menu right" value="' . __('Add to Menu', $this->args['namespace']) . '" name="add-posttype-archive-menu-item" id="submit-posttype-archive" />'; $s .= '<span class="spinner"></span>'; $s .= '</span>'; $s .= '</p>'; echo $s; } }
/** * Returns the menu formatted to edit. * * @since 3.0.0 * * @param int $menu_id Optional. The ID of the menu to format. Default 0. * @return string|WP_Error $output The menu formatted to edit or error object on failure. */ function wp_get_nav_menu_to_edit($menu_id = 0) { $menu = wp_get_nav_menu_object($menu_id); // If the menu exists, get its items. if (is_nav_menu($menu)) { $menu_items = wp_get_nav_menu_items($menu->term_id, array('post_status' => 'any')); $result = '<div id="menu-instructions" class="post-body-plain'; $result .= !empty($menu_items) ? ' menu-instructions-inactive">' : '">'; $result .= '<p>' . __('Add menu items from the column on the left.') . '</p>'; $result .= '</div>'; if (empty($menu_items)) { return $result . ' <ul class="menu" id="menu-to-edit"> </ul>'; } /** * Filter the Walker class used when adding nav menu items. * * @since 3.0.0 * * @param string $class The walker class to use. Default 'Walker_Nav_Menu_Edit'. * @param int $menu_id ID of the menu being rendered. */ $walker_class_name = apply_filters('wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $menu_id); if (class_exists($walker_class_name)) { $walker = new $walker_class_name(); } else { return new WP_Error('menu_walker_not_exist', sprintf(__('The Walker class named <strong>%s</strong> does not exist.'), $walker_class_name)); } $some_pending_menu_items = $some_invalid_menu_items = false; foreach ((array) $menu_items as $menu_item) { if (isset($menu_item->post_status) && 'draft' == $menu_item->post_status) { $some_pending_menu_items = true; } if (!empty($menu_item->_invalid)) { $some_invalid_menu_items = true; } } if ($some_pending_menu_items) { $result .= '<div class="updated inline"><p>' . __('Click Save Menu to make pending menu items public.') . '</p></div>'; } if ($some_invalid_menu_items) { $result .= '<div class="error inline"><p>' . __('There are some invalid menu items. Please check or delete them.') . '</p></div>'; } $result .= '<ul class="menu" id="menu-to-edit"> '; $result .= walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $menu_items), 0, (object) array('walker' => $walker)); $result .= ' </ul> '; return $result; } elseif (is_wp_error($menu)) { return $menu; } }
/** * Ajax handler is triggered when * something is added to the nav menu * @ajax */ public function ajax_add_menu_item() { if (!tf_current_user_can(array('manage_options', 'edit_theme_options'), false)) { die('-1'); } check_ajax_referer('add-menu_item', 'menu-settings-column-nonce'); require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; // For performance reasons, we omit some object properties from the checklist. // The following is a hacky way to restore them when adding non-custom items. $menu_items_data = array(); if ($this->request->POST('menu-item')) { foreach ((array) $this->request->POST('menu-item') as $menu_item_data) { if (!empty($menu_item_data['menu-item-type']) && 'custom' != $menu_item_data['menu-item-type'] && !empty($menu_item_data['menu-item-object-id'])) { switch ($menu_item_data['menu-item-type']) { case 'post_type': $_object = get_post($menu_item_data['menu-item-object-id']); break; case 'taxonomy': $_object = get_term($menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object']); break; } $_menu_items = array_map('wp_setup_nav_menu_item', array($_object)); $_menu_item = array_shift($_menu_items); // Restore the missing menu item properties $menu_item_data['menu-item-description'] = $_menu_item->description; } $menu_items_data[] = $menu_item_data; } } $item_ids = wp_save_nav_menu_items(0, $menu_items_data); if (is_wp_error($item_ids)) { die('-1'); } foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_items[] = $menu_obj; } } if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new TF_ADMIN_MENU_WALKER()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } die; }
/** * */ function ajax_add_post_type() { if (!current_user_can('edit_theme_options')) { die('-1'); } require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; if (empty($_POST['post_types'])) { exit; } // Create menu items and store IDs in array $item_ids = array(); foreach ((array) $_POST['post_types'] as $post_type) { $post_type_obj = get_post_type_object($post_type); if (!$post_type_obj) { continue; } $menu_item_data = array('menu-item-title' => esc_attr($post_type_obj->labels->name), 'menu-item-type' => 'post_type_archive', 'menu-item-object' => esc_attr($post_type), 'menu-item-url' => get_post_type_archive_link($post_type)); //Collect the items' IDs. $item_ids[] = wp_update_nav_menu_item(0, 0, $menu_item_data); } // If there was an error die here if (is_wp_error($item_ids)) { die('-1'); } // Set up menu items foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_items[] = $menu_obj; } } // This gets the HTML to returns it to the menu if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } // Finally don't forget to exit exit; }
/** * AJAX Callback to create the menu item and add it to menu * @return string $HTML built with walk_nav_menu_tree() * use \Post_Type_Archive_Links::is_allowed() Check request and return choosen post types */ public function ajax_add_year() { $years = $this->is_allowed(); // Create menu items and store IDs in array $item_ids = array(); $menu_item_data = array('menu-item-title' => esc_attr($years[0]), 'menu-item-type' => 'cyear_archive', 'menu-item-object' => esc_attr($years[0]), 'menu-item-url' => get_year_link($years[0])); // Collect the items' IDs. $item_ids[] = wp_update_nav_menu_item(0, 0, $menu_item_data); // If there was an error die here is_wp_error($item_ids) and die('-1'); // Set up menu items foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); // don't show "(pending)" in ajax-added items $menu_obj->label = $menu_obj->title; $menu_items[] = $menu_obj; } } // Needed to get the Walker up and running require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; // This gets the HTML to returns it to the menu if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } // Finally don't forget to exit exit; }
public function ee_cpt_archive_pages() { global $nav_menu_selected_id; $db_fields = false; $walker = new Walker_Nav_Menu_Checklist($db_fields); $current_tab = 'event-archives'; /*if ( ! empty( $_REQUEST['quick-search-posttype-' . $post_type_name] ) ) { $current_tab = 'search'; }/**/ $removed_args = array('action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce'); ?> <div id="posttype-extra-nav-menu-pages" class="posttypediv"> <ul id="posttype-extra-nav-menu-pages-tabs" class="posttype-tabs add-menu-item-tabs"> <li <?php echo 'event-archives' == $current_tab ? ' class="tabs"' : ''; ?> > <a class="nav-tab-link" data-type="tabs-panel-posttype-extra-nav-menu-pages-event-archives" href="<?php if ($nav_menu_selected_id) { echo esc_url(add_query_arg('extra-nav-menu-pages-tab', 'event-archives', remove_query_arg($removed_args))); } ?> #tabs-panel-posttype-extra-nav-menu-pages-event-archives"> <?php _e('Event Archive Pages', 'event_espresso'); ?> </a> </li> <?php /* // temporarily removing but leaving skeleton in place in case we ever decide to add more tabs. <li <?php echo ( 'all' == $current_tab ? ' class="tabs"' : '' ); ?>> <a class="nav-tab-link" data-type="<?php echo esc_attr( $post_type_name ); ?>-all" href="<?php if ( $nav_menu_selected_id ) echo esc_url(add_query_arg($post_type_name . '-tab', 'all', remove_query_arg($removed_args))); ?>#<?php echo $post_type_name; ?>-all"> <?php _e( 'View All' ); ?> </a> </li> <li <?php echo ( 'search' == $current_tab ? ' class="tabs"' : '' ); ?>> <a class="nav-tab-link" data-type="tabs-panel-posttype-extra-nav-menu-pages-search" href="<?php if ( $nav_menu_selected_id ) echo esc_url(add_query_arg('extra-nav-menu-pages-tab', 'search', remove_query_arg($removed_args))); ?>#tabs-panel-posttype-extra-nav-menu-pages-search"> <?php _e( 'Search'); ?> </a> </li> --> </ul><!-- .posttype-tabs --> <?php */ ?> <div id="tabs-panel-posttype-extra-nav-menu-pages-event-archives" class="tabs-panel <?php echo 'event-archives' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive'; ?> "> <ul id="extra-nav-menu-pageschecklist-event-archives" class="categorychecklist form-no-clear"> <?php $pages = $this->_get_extra_nav_menu_pages_items(); $args['walker'] = $walker; echo walk_nav_menu_tree(array_map(array($this, '_setup_extra_nav_menu_pages_items'), $pages), 0, (object) $args); ?> </ul> </div><!-- /.tabs-panel --> <p class="button-controls"> <span class="list-controls"> <a href="<?php echo esc_url(add_query_arg(array('extra-nav-menu-pages-tab' => 'event-archives', 'selectall' => 1), remove_query_arg($removed_args))); ?> #posttype-extra-nav-menu-pages>" class="select-all"><?php _e('Select All'); ?> </a> </span> <span class="add-to-menu"> <input type="submit"<?php wp_nav_menu_disabled_check($nav_menu_selected_id); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e(__('Add to Menu')); ?> " name="add-post-type-menu-item" id="<?php esc_attr_e('submit-posttype-extra-nav-menu-pages'); ?> " /> <span class="spinner"></span> </span> </p> </div><!-- /.posttypediv --> <?php }
/** * Display a navigation menu. * * @since 1.7.0 * * @param string|array $args { * An array of optional arguments. * * @type string $after Text after the link text. Default: ''. * @type string $before Text before the link text. Default: ''. * @type string $container The name of the element to wrap the navigation * with. 'div' or 'nav'. Default: 'div'. * @type string $container_class The class that is applied to the container. * Default: 'menu-bp-container'. * @type string $container_id The ID that is applied to the container. * Default: ''. * @type int $depth How many levels of the hierarchy are to be included. * 0 means all. Default: 0. * @type bool $echo True to echo the menu, false to return it. * Default: true. * @type bool $fallback_cb If the menu doesn't exist, should a callback * function be fired? Default: false (no fallback). * @type string $items_wrap How the list items should be wrapped. Should be * in the form of a printf()-friendly string, using numbered * placeholders. Default: '<ul id="%1$s" class="%2$s">%3$s</ul>'. * @type string $link_after Text after the link. Default: ''. * @type string $link_before Text before the link. Default: ''. * @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: 'menu-bp', incremented. * @type string $walker Allows a custom walker class to be specified. * Default: 'BP_Walker_Nav_Menu'. * } * @return string|null If $echo is false, returns a string containing the nav * menu markup. */ function bp_nav_menu($args = array()) { static $menu_id_slugs = array(); $defaults = array('after' => '', 'before' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'depth' => 0, 'echo' => true, 'fallback_cb' => false, 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', 'link_after' => '', 'link_before' => '', 'menu_class' => 'menu', 'menu_id' => '', 'walker' => ''); $args = wp_parse_args($args, $defaults); /** * Filters the parsed bp_nav_menu arguments. * * @since 1.7.0 * * @param array $args Array of parsed arguments. */ $args = apply_filters('bp_nav_menu_args', $args); $args = (object) $args; $items = $nav_menu = ''; $show_container = false; // Create custom walker if one wasn't set. if (empty($args->walker)) { $args->walker = new BP_Walker_Nav_Menu(); } // Sanitise values for class and ID. $args->container_class = sanitize_html_class($args->container_class); $args->container_id = sanitize_html_class($args->container_id); // Whether to wrap the ul, and what to wrap it with. if ($args->container) { /** * Filters the allowed tags for the wp_nav_menu_container. * * @since 1.7.0 * * @param array $value Array of allowed tags. Default 'div' and 'nav'. */ $allowed_tags = apply_filters('wp_nav_menu_container_allowedtags', array('div', 'nav')); if (in_array($args->container, $allowed_tags)) { $show_container = true; $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-bp-container"'; $id = $args->container_id ? ' id="' . esc_attr($args->container_id) . '"' : ''; $nav_menu .= '<' . $args->container . $id . $class . '>'; } } /** * Filters the BuddyPress menu objects. * * @since 1.7.0 * * @param array $value Array of nav menu objects. * @param array $args Array of arguments for the menu. */ $menu_items = apply_filters('bp_nav_menu_objects', bp_get_nav_menu_items(), $args); $items = walk_nav_menu_tree($menu_items, $args->depth, $args); unset($menu_items); // Set the ID that is applied to the ul element which forms the menu. if (!empty($args->menu_id)) { $wrap_id = $args->menu_id; } else { $wrap_id = 'menu-bp'; // If a specific ID wasn't requested, and there are multiple menus on the same screen, make sure the autogenerated ID is unique. while (in_array($wrap_id, $menu_id_slugs)) { 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; /** * Filters the BuddyPress menu items. * * Allow plugins to hook into the menu to add their own <li>'s * * @since 1.7.0 * * @param array $items Array of nav menu items. * @param array $args Array of arguments for the menu. */ $items = apply_filters('bp_nav_menu_items', $items, $args); // Build the output. $wrap_class = $args->menu_class ? $args->menu_class : ''; $nav_menu .= sprintf($args->items_wrap, esc_attr($wrap_id), esc_attr($wrap_class), $items); unset($items); // If we've wrapped the ul, close it. if (!empty($show_container)) { $nav_menu .= '</' . $args->container . '>'; } /** * Filters the final BuddyPress menu output. * * @since 1.7.0 * * @param string $nav_menu Final nav menu output. * @param array $args Array of arguments for the menu. */ $nav_menu = apply_filters('bp_nav_menu', $nav_menu, $args); if (!empty($args->echo)) { echo $nav_menu; } else { return $nav_menu; } }
function wp_nav_menu_item_sensei_links_meta_box($object) { global $nav_menu_selected_id; $menu_items = array('#senseicourses' => __('Courses', 'woothemes-sensei'), '#senseilessons' => __('Lessons', 'woothemes-sensei'), '#senseimycourses' => __('My Courses', 'woothemes-sensei'), '#senseilearnerprofile' => __('My Profile', 'woothemes-sensei'), '#senseimymessages' => __('My Messages', 'woothemes-sensei'), '#senseiloginlogout' => __('Login', 'woothemes-sensei') . '|' . __('Logout', 'woothemes-sensei')); $menu_items_obj = array(); foreach ($menu_items as $value => $title) { $menu_items_obj[$title] = new stdClass(); $menu_items_obj[$title]->object_id = esc_attr($value); $menu_items_obj[$title]->title = esc_attr($title); $menu_items_obj[$title]->url = esc_attr($value); $menu_items_obj[$title]->description = 'description'; $menu_items_obj[$title]->db_id = 0; $menu_items_obj[$title]->object = 'sensei'; $menu_items_obj[$title]->menu_item_parent = 0; $menu_items_obj[$title]->type = 'custom'; $menu_items_obj[$title]->target = ''; $menu_items_obj[$title]->attr_title = ''; $menu_items_obj[$title]->classes = array(); $menu_items_obj[$title]->xfn = ''; } $walker = new Walker_Nav_Menu_Checklist(array()); ?> <div id="sensei-links" class="senseidiv taxonomydiv"> <div id="tabs-panel-sensei-links-all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> <ul id="sensei-linkschecklist" class="list:sensei-links categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $menu_items_obj), 0, (object) array('walker' => $walker)); ?> </ul> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php disabled($nav_menu_selected_id, 0); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu', 'woothemes-sensei'); ?> " name="add-sensei-links-menu-item" id="submit-sensei-links" /> <span class="spinner"></span> </span> </p> </div><!-- .senseidiv --> <?php }
} $elems_obj = array(); foreach ($elems as $value => $title) { $elems_obj[$title] = new bawlogItems(); $elems_obj[$title]->object_id = esc_attr($value); $elems_obj[$title]->title = esc_attr($title); $elems_obj[$title]->url = esc_attr($value); } $walker = new Walker_Nav_Menu_Checklist(array()); ?> <div id="login-links" class="loginlinksdiv"> <div id="tabs-panel-login-links-all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> <ul id="login-linkschecklist" class="list:login-links categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $elems_obj), 0, (object) array('walker' => $walker)); ?> </ul> </div> <p class="button-controls"> <span class="list-controls hide-if-no-js"> <a href="javascript:void(0);" class="help" onclick="jQuery( '#help-login-links' ).toggle();"><?php _e('Help'); ?> </a> <span class="hide-if-js" id="help-login-links"><br /><a name="help-login-links"></a> <?php if (get_locale() == 'fr_FR') { // Light L10N echo '◽ Vous pouvez ajouter une page de redirection après le login/logout du membre en ajoutant simplement le lien relatif après le mot clé dans le lien, exemple <code>#bawloginout#index.php</code>.';
/** * Ajax handler for adding a menu item. * * @since 3.1.0 */ function wp_ajax_add_menu_item() { check_ajax_referer('add-menu_item', 'menu-settings-column-nonce'); if (!current_user_can('edit_theme_options')) { wp_die(-1); } require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; // For performance reasons, we omit some object properties from the checklist. // The following is a hacky way to restore them when adding non-custom items. $menu_items_data = array(); foreach ((array) $_POST['menu-item'] as $menu_item_data) { if (!empty($menu_item_data['menu-item-type']) && 'custom' != $menu_item_data['menu-item-type'] && !empty($menu_item_data['menu-item-object-id'])) { switch ($menu_item_data['menu-item-type']) { case 'post_type': $_object = get_post($menu_item_data['menu-item-object-id']); break; case 'post_type_archive': $_object = get_post_type_object($menu_item_data['menu-item-object']); break; case 'taxonomy': $_object = get_term($menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object']); break; } $_menu_items = array_map('wp_setup_nav_menu_item', array($_object)); $_menu_item = reset($_menu_items); // Restore the missing menu item properties $menu_item_data['menu-item-description'] = $_menu_item->description; } $menu_items_data[] = $menu_item_data; } $item_ids = wp_save_nav_menu_items(0, $menu_items_data); if (is_wp_error($item_ids)) { wp_die(0); } $menu_items = array(); foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_items[] = $menu_obj; } } /** This filter is documented in wp-admin/includes/nav-menu.php */ $walker_class_name = apply_filters('wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $_POST['menu']); if (!class_exists($walker_class_name, false)) { wp_die(0); } if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new $walker_class_name()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } wp_die(); }
/** * Displays a navigation menu. * * Optional $args contents: * * id - The menu id. Defaults to blank. * slug - The menu slug. Defaults to blank. * menu_class - CSS class to use for the div container of the menu list. Defaults to 'menu'. * format - Whether to format the ul. Defaults to 'div'. * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. * before - Text before the link text. * after - Text after the link text. * link_before - Text before the link. * link_after - Text after the link. * echo - Whether to echo the menu or return it. Defaults to echo. * * @todo show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link. * * @since 3.0.0 * * @param array $args Arguments */ function wp_nav_menu($args = array()) { $defaults = array('menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'depth' => 0, 'walker' => '', 'context' => 'frontend'); $args = wp_parse_args($args, $defaults); $args = apply_filters('wp_nav_menu_args', $args); $args = (object) $args; // Get the nav menu $menu = wp_get_nav_menu_object($args->menu); // If we couldn't find a menu based off the name, id or slug, // get the first menu that has items. if (!$menu) { $menus = wp_get_nav_menus(); foreach ($menus as $menu_maybe) { if (wp_get_nav_menu_items($menu_maybe->term_id)) { $menu = $menu_maybe; break; } } } // If the menu exists, get it's items. if ($menu && !is_wp_error($menu)) { $menu_items = wp_get_nav_menu_items($menu->term_id, $args->context); } // If no menu was found or if the menu has no items, call the fallback_cb if (!$menu || is_wp_error($menu) || isset($menu_items) && empty($menu_items)) { if ('frontend' == $args->context && (function_exists($args->fallback_cb) || is_callable($args->fallback_cb))) { return call_user_func($args->fallback_cb, (array) $args); } } $nav_menu = ''; $items = ''; $container_allowedtags = apply_filters('wp_nav_menu_container_allowedtags', array('div', 'p', 'nav')); if (in_array($args->container, $container_allowedtags)) { $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-' . $menu->slug . '-container"'; $nav_menu .= '<' . $args->container . $class . '>'; } // Set up the $menu_item variables foreach ((array) $menu_items as $key => $menu_item) { $menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item($menu_item, 'frontend'); } $items .= walk_nav_menu_tree($menu_items, $args->depth, $args); // Attributes $attributes = ' id="menu-' . $menu->slug . '"'; $attributes .= $args->menu_class ? ' class="' . $args->menu_class . '"' : ''; $nav_menu .= '<ul' . $attributes . '>'; // Allow plugins to hook into the menu to add their own <li>'s if ('frontend' == $args->context) { $items = apply_filters('wp_nav_menu_items', $items, $args); $items = apply_filters("wp_nav_menu_{$menu->slug}_items", $items, $args); $nav_menu .= $items; } else { $nav_menu .= $items; } $nav_menu .= '</ul>'; if (in_array($args->container, $container_allowedtags)) { $nav_menu .= '</' . $args->container . '>'; } $nav_menu = apply_filters('wp_nav_menu', $nav_menu, $args); if ($args->echo) { echo $nav_menu; } else { return $nav_menu; } }
/** * Displays a navigation menu. * * Optional $args contents: * * menu - The menu that is desired. Accepts (matching in order) id, slug, name. Defaults to blank. * menu_class - CSS class to use for the ul element which forms the menu. Defaults to 'menu'. * menu_id - The ID that is applied to the ul element which forms the menu. Defaults to the menu slug, incremented. * container - Whether to wrap the ul, and what to wrap it with. Defaults to 'div'. * container_class - the class that is applied to the container. Defaults to 'menu-{menu slug}-container'. * container_id - The ID that is applied to the container. Defaults to blank. * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallback. * before - Text before the link text. * after - Text after the link text. * link_before - Text before the link. * link_after - Text after the link. * echo - Whether to echo the menu or return it. Defaults to echo. * depth - how many levels of the hierarchy are to be included. 0 means all. Defaults to 0. * walker - allows a custom walker to be specified. * theme_location - the location in the theme to be used. Must be registered with register_nav_menu() in order to be selectable by the user. * items_wrap - How the list items should be wrapped. Defaults to a ul with an id and class. Uses printf() format with numbered placeholders. * * @since 3.0.0 * * @param array $args Arguments */ function wp_nav_menu($args = array()) { static $menu_id_slugs = array(); $defaults = array('menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', '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>', 'depth' => 0, 'walker' => '', 'theme_location' => ''); $args = wp_parse_args($args, $defaults); $args = apply_filters('wp_nav_menu_args', $args); $args = (object) $args; // 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 if (!$menu && $args->theme_location && ($locations = get_nav_menu_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) { if ($menu_items = wp_get_nav_menu_items($menu_maybe->term_id)) { $menu = $menu_maybe; break; } } } // 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); } // If no menu was found or if the menu has no items and no location was requested, call the fallback_cb if it exists if ((!$menu || is_wp_error($menu) || isset($menu_items) && empty($menu_items) && !$args->theme_location) && $args->fallback_cb && is_callable($args->fallback_cb)) { return call_user_func($args->fallback_cb, (array) $args); } // If no fallback function was specified and the menu doesn't exists, bail. if (!$menu || is_wp_error($menu)) { return false; } $nav_menu = $items = ''; $show_container = false; if ($args->container) { $allowed_tags = apply_filters('wp_nav_menu_container_allowedtags', array('div', 'nav')); if (in_array($args->container, $allowed_tags)) { $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) . '"' : ''; $nav_menu .= '<' . $args->container . $id . $class . '>'; } } // Set up the $menu_item variables _wp_menu_item_classes_by_context($menu_items); $sorted_menu_items = array(); foreach ((array) $menu_items as $key => $menu_item) { $sorted_menu_items[$menu_item->menu_order] = $menu_item; } unset($menu_items); $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)) { 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 : ''; // Allow plugins to hook into the menu to add their own <li>'s $items = apply_filters('wp_nav_menu_items', $items, $args); $items = apply_filters("wp_nav_menu_{$menu->slug}_items", $items, $args); $nav_menu .= sprintf($args->items_wrap, esc_attr($wrap_id), esc_attr($wrap_class), $items); unset($items); if ($show_container) { $nav_menu .= '</' . $args->container . '>'; } $nav_menu = apply_filters('wp_nav_menu', $nav_menu, $args); if ($args->echo) { echo $nav_menu; } else { return $nav_menu; } }
/** * Build and populate the BuddyPress accordion on Appearance > Menus. * * @since 1.9.0 * * @global $nav_menu_selected_id */ function bp_admin_do_wp_nav_menu_meta_box() { global $nav_menu_selected_id; $walker = new BP_Walker_Nav_Menu_Checklist(false); $args = array('walker' => $walker); $post_type_name = 'buddypress'; $tabs = array(); $tabs['loggedin']['label'] = __('Logged-In', 'buddypress'); $tabs['loggedin']['pages'] = bp_nav_menu_get_loggedin_pages(); $tabs['loggedout']['label'] = __('Logged-Out', 'buddypress'); $tabs['loggedout']['pages'] = bp_nav_menu_get_loggedout_pages(); ?> <div id="buddypress-menu" class="posttypediv"> <h4><?php _e('Logged-In', 'buddypress'); ?> </h4> <p><?php _e('<em>Logged-In</em> links are relative to the current user, and are not visible to visitors who are not logged in.', 'buddypress'); ?> </p> <div id="tabs-panel-posttype-<?php echo $post_type_name; ?> -loggedin" class="tabs-panel tabs-panel-active"> <ul id="buddypress-menu-checklist-loggedin" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $tabs['loggedin']['pages']), 0, (object) $args); ?> </ul> </div> <h4><?php _e('Logged-Out', 'buddypress'); ?> </h4> <p><?php _e('<em>Logged-Out</em> links are not visible to users who are logged in.', 'buddypress'); ?> </p> <div id="tabs-panel-posttype-<?php echo $post_type_name; ?> -loggedout" class="tabs-panel tabs-panel-active"> <ul id="buddypress-menu-checklist-loggedout" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $tabs['loggedout']['pages']), 0, (object) $args); ?> </ul> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php if (function_exists('wp_nav_menu_disabled_check')) { wp_nav_menu_disabled_check($nav_menu_selected_id); } ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu', 'buddypress'); ?> " name="add-custom-menu-item" id="submit-buddypress-menu" /> <span class="spinner"></span> </span> </p> </div><!-- /#buddypress-menu --> <?php }
/** * Displays taxonomy metaboxes * * @since StartBox 2.5 * * @param string $object Not used. * @param string $taxonomy The taxonomy object. */ function sb_sidebars_taxonomy_meta_box($post, $taxonomy) { $taxonomy_name = $taxonomy['args']->name; $args = array('child_of' => 0, 'exclude' => '', 'hide_empty' => false, 'hierarchical' => 1, 'include' => '', 'include_last_update_time' => false, 'order' => 'ASC', 'orderby' => 'name', 'pad_counts' => false); $terms = get_terms($taxonomy_name, $args); $selected = (array) maybe_unserialize(get_post_meta($post->ID, '_tax', true)); if (!$terms || is_wp_error($terms)) { echo '<p>' . __('No items.') . '</p>'; return; } // Use a custom walker for displaying the taxonomy list $walker = new SB_Sidebars_Checklist(); ?> <p><?php printf(__('Select which %s should use this sidebar:'), $taxonomy['args']->label); ?> </p> <div id="taxonomy-<?php echo $taxonomy_name; ?> " class="taxonomydiv"> <div id="tabs-panel-<?php echo $taxonomy_name; ?> -all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> <ul id="<?php echo $taxonomy_name; ?> checklist" class="list:<?php echo $taxonomy_name; ?> categorychecklist form-no-clear"> <?php echo '<li><label><input type="checkbox" ' . checked(in_array('all-' . $taxonomy['args']->rewrite['slug'], $selected), true, false) . ' name="tax[all-' . $taxonomy['args']->rewrite['slug'] . ']" value="true"/> All ' . $taxonomy['args']->label . ' (includes all future ' . $taxonomy['args']->label . ')</label></li>'; $args['walker'] = $walker; echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $terms), 0, (object) $args); ?> </ul> </div><!-- /.tabs-panel --> </div><!-- /.taxonomydiv --> <?php }
/** * Seiten hierarchisch auflisten * * @since 1.0 * @author ppfeufer */ private function _get_pages() { $var_sPostType = 'page'; $args = array('order' => 'ASC', 'orderby' => 'title', 'posts_per_page' => '9999', 'post_type' => $var_sPostType, 'post_status' => 'publish', 'suppress_filters' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false); $get_posts = new \WP_Query(); $posts = $get_posts->query($args); if (!$get_posts->post_count || !$posts) { echo '<p>' . __('No items.', TWOCLICK_TEXTDOMAIN) . '</p>'; return; } // END if(!$get_posts->post_count || !$posts) $db_fields = false; if (is_post_type_hierarchical($var_sPostType)) { $db_fields = array('parent' => 'post_parent', 'id' => 'ID'); } // END if(is_post_type_hierarchical($var_sPostType)) $walker = new Twoclick_Social_Media_Buttons_Pages_Walker($db_fields); $removed_args = array('action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce'); ?> <div class="posttypediv"> <div id="<?php echo $var_sPostType; ?> -all" class="select-pages"> <ul id="<?php echo $var_sPostType; ?> checklist" class="list:<?php echo $var_sPostType; ?> categorychecklist form-no-clear"> <?php $args['walker'] = $walker; $posts = apply_filters('nav_menu_items_' . $var_sPostType, $posts, $args); $checkbox_items = walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $posts), 0, (object) $args); echo $checkbox_items; ?> </ul> </div> </div> <?php }
function wp_nav_menu($args = array()) { static $menu_id_slugs = array(); $defaults = array('menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', '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>', 'depth' => 0, 'walker' => '', 'theme_location' => ''); $args = wp_parse_args($args, $defaults); $args = apply_filters('wp_nav_menu_args', $args); $args = (object) $args; $nav_menu = apply_filters('pre_wp_nav_menu', null, $args); // $nav_menu = null; 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 ); $menu = wp_get_nav_menu_object($args->menu_id); // Get the nav menu based on the theme_location // if ( ! $menu && $args->theme_location && ( $locations = get_nav_menu_locations() ) && isset( $locations[ $args->theme_location ] ) ) // $menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] ); if (!$menu && $args->theme_location) { $menu = wp_get_nav_menu_object($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) { if ($menu_items = wp_get_nav_menu_items($menu_maybe->term_id, array('update_post_term_cache' => false))) { $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)); } $nav_menu = $items = ''; // $show_container = false; // if ( $args->container ) { // $allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) ); // if ( is_string( $args->container ) && in_array( $args->container, $allowed_tags ) ) { // $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 ) . '"' : ''; // $nav_menu .= '<'. $args->container . $id . $class . '>'; // } // } // Set up the $menu_item variables _wp_menu_item_classes_by_context($menu_items); $sorted_menu_items = $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); $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)) { 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 : ''; $items = apply_filters('wp_nav_menu_items', $items, $args); $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 . '>'; } $nav_menu = apply_filters('wp_nav_menu', $nav_menu, $args); if ($args->echo) { echo $nav_menu; } else { return $nav_menu; } }
/** * Displays a navigation menu. * * @since 3.0.0 * * @param array $args { * Optional. Array of nav menu arguments. * * @type string $menu Desired menu. Accepts (matching in order) id, slug, name. 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 callback|bool $fallback_cb If the menu doesn't exists, a callback function will fire. * Default is 'wp_page_menu'. Set to false for no fallback. * @type string $before Text before the link text. Default empty. * @type string $after Text after the link text. Default empty. * @type string $link_before Text before the link. Default empty. * @type string $link_after Text after the link. 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. * @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. Default is a ul with an id and class. * Uses printf() format with numbered placeholders. * } * @return mixed 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' => '', '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>', 'depth' => 0, 'walker' => '', 'theme_location' => ''); $args = wp_parse_args($args, $defaults); /** * Filter 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; /** * Filter whether to short-circuit the wp_nav_menu() output. * * Returning a non-null value to 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 object $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 if (!$menu && $args->theme_location && ($locations = get_nav_menu_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) { if ($menu_items = wp_get_nav_menu_items($menu_maybe->term_id, array('update_post_term_cache' => false))) { $menu = $menu_maybe; break; } } } // 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) && $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) { /** * Filter the list of HTML tags that are valid for use as menu containers. * * @since 3.0.0 * * @param array $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 (in_array($args->container, $allowed_tags)) { $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) . '"' : ''; $nav_menu .= '<' . $args->container . $id . $class . '>'; } } // Set up the $menu_item variables _wp_menu_item_classes_by_context($menu_items); $sorted_menu_items = $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); /** * Filter 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 object $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)) { 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 : ''; /** * Filter 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 object $args An object containing wp_nav_menu() arguments. */ $items = apply_filters('wp_nav_menu_items', $items, $args); /** * Filter 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 object $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 . '>'; } /** * Filter 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 object $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; } }
function wplms_admin_do_wp_nav_menu_meta_box() { global $nav_menu_selected_id; $walker = new WPLMS_backend_menu(false); $args = array('walker' => $walker); $post_type_name = 'wplms'; $tabs = array(); $tabs['membersonly']['label'] = __('Members-Only', 'vibe'); $tabs['membersonly']['pages'] = wplms_nav_menu_get_members_pages(); $tabs['instructorsonly']['label'] = __('Instructors-Only', 'vibe'); $tabs['instructorsonly']['pages'] = wplms_nav_menu_get_instructors_pages(); ?> <div id="wplms-menu" class="posttypediv"> <h4><?php _e('Members-Only', 'vibe'); ?> </h4> <p><?php _e('<em>Members-Only</em> These links are only visible to logged in users.', 'vibe'); ?> </p> <div id="tabs-panel-posttype-<?php echo $post_type_name; ?> -loggedin" class="tabs-panel tabs-panel-active"> <ul id="wplms-menu-checklist-loggedin" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $tabs['membersonly']['pages']), 0, (object) $args); ?> </ul> </div> <h4><?php _e('Instructors-Only', 'vibe'); ?> </h4> <p><?php _e('<em>Instructors-Only</em> links are visible to Instructors.', 'vibe'); ?> </p> <div id="tabs-panel-posttype-<?php echo $post_type_name; ?> -loggedout" class="tabs-panel tabs-panel-active"> <ul id="buddypress-menu-checklist-loggedout" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $tabs['instructorsonly']['pages']), 0, (object) $args); ?> </ul> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php if (function_exists('wp_nav_menu_disabled_check')) { wp_nav_menu_disabled_check($nav_menu_selected_id); } ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu', 'vibe'); ?> " name="add-custom-menu-item" id="submit-wplms-menu" /> <span class="spinner"></span> </span> </p> </div><!-- /#buddypress-menu --> <?php }
/** * Returns the menu formatted to edit. * * @since 3.0.0 * * @param string $menu_id The ID of the menu to format. * @return string|WP_Error $output The menu formatted to edit or error object on failure. */ function wp_get_nav_menu_to_edit($menu_id = 0) { $menu = wp_get_nav_menu_object($menu_id); // If the menu exists, get its items. if (is_nav_menu($menu)) { $menu_items = wp_get_nav_menu_items($menu->term_id, array('post_status' => 'any')); $result = '<div id="menu-instructions" class="post-body-plain'; $result .= !empty($menu_items) ? ' menu-instructions-inactive">' : '">'; $result .= '<p>' . __('Select menu items (pages, categories, links) from the boxes at left to begin building your custom menu.') . '</p>'; $result .= '</div>'; if (empty($menu_items)) { return $result . ' <ul class="menu" id="menu-to-edit"> </ul>'; } $walker_class_name = apply_filters('wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $menu_id); if (class_exists($walker_class_name)) { $walker = new $walker_class_name(); } else { return new WP_Error('menu_walker_not_exist', sprintf(__('The Walker class named <strong>%s</strong> does not exist.'), $walker_class_name)); } $some_pending_menu_items = $some_invalid_menu_items = false; foreach ((array) $menu_items as $menu_item) { if (isset($menu_item->post_status) && 'draft' == $menu_item->post_status) { $some_pending_menu_items = true; } if (!empty($menu_item->_invalid)) { $some_invalid_menu_items = true; } } if ($some_pending_menu_items) { $result .= '<div class="updated inline"><p>' . __('Click Save Menu to make pending menu items public.') . '</p></div>'; } if ($some_invalid_menu_items) { $result .= '<div class="error inline"><p>' . __('There are some invalid menu items. Please check or delete them.') . '</p></div>'; } $result .= '<ul class="menu" id="menu-to-edit"> '; $result .= walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $menu_items), 0, (object) array('walker' => $walker)); $result .= ' </ul> '; return $result; } elseif (is_wp_error($menu)) { return $menu; } }
function avia_ajax_switch_menu_walker() { if (!current_user_can('edit_theme_options')) { die('-1'); } check_ajax_referer('add-menu_item', 'menu-settings-column-nonce'); require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; $item_ids = wp_save_nav_menu_items(0, $_POST['menu-item']); if (is_wp_error($item_ids)) { die('-1'); } foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_items[] = $menu_obj; } } if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new avia_backend_walker()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } die('end'); }
/** * Zpracování metaboxu pro archivy post typů v menu * NENÍ POTŘEBA VOLAT VEŘEJNĚ * * @author Martin Hlaváč * @link http://www.ktstudio.cz * * @param string $html */ public function postArchivesMenuMetaBoxCallBack() { $postTypes = get_post_types(array("show_in_nav_menus" => true, "has_archive" => true), "object"); if (KT::arrayIssetAndNotEmpty($postTypes)) { foreach ($postTypes as $postType) { $postType->classes = array(); $postType->type = "custom"; //$postType->name; $postType->object_id = $postType->name; $postType->title = $postType->labels->name; $postType->description = $postType->labels->name; $postType->object = self::POST_TYPE_ARCHIVE_OBJECT_KEY; $postType->menu_item_parent = null; $postType->parent = null; $postType->db_id = null; $postType->url = get_post_type_archive_link($postType->name); $postType->target = null; $postType->attr_title = $postType->labels->name; $postType->xfn = null; } $walker = new Walker_Nav_Menu_Checklist(array()); KT::theTabsIndent(0, "<div id=\"kt-archive\" class=\"posttypediv\">", true); KT::theTabsIndent(1, "<div id=\"tabs-panel-kt-archive\" class=\"tabs-panel tabs-panel-active\">", true); KT::theTabsIndent(2, "<ul id=\"kt-archive-checklist\" class=\"categorychecklist form-no-clear\">", true); KT::theTabsIndent(3, walk_nav_menu_tree(array_map("wp_setup_nav_menu_item", $postTypes), 0, (object) array("walker" => $walker)), true); KT::theTabsIndent(2, "</ul>", true); KT::theTabsIndent(1, "</div>", true); KT::theTabsIndent(0, "</div>", true, true); $addMenuTitle = htmlspecialchars(__("Přidat do menu", "KT_CORE_DOMAIN")); KT::theTabsIndent(0, "<p class=\"button-controls\">", true); KT::theTabsIndent(1, "<span class=\"add-to-menu\">", true); KT::theTabsIndent(2, "<input type=\"submit\" id=\"submit-kt-archive\" name=\"kt-add-archive-menu-item\" class=\"button-secondary submit-add-to-menu\" value=\"{$addMenuTitle}\" />", true); KT::theTabsIndent(1, "</span>", true); KT::theTabsIndent(0, "</p>", true, true); } else { KT::theTabsIndent(0, KT_EMPTY_SYMBOL, true, true); } }
$item_ids = wp_save_nav_menu_items(0, $menu_items_data); if (is_wp_error($item_ids)) { die('-1'); } foreach ((array) $item_ids as $menu_item_id) { $menu_obj = get_post($menu_item_id); if (!empty($menu_obj->ID)) { $menu_obj = wp_setup_nav_menu_item($menu_obj); $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items $menu_items[] = $menu_obj; } } if (!empty($menu_items)) { $args = array('after' => '', 'before' => '', 'link_after' => '', 'link_before' => '', 'walker' => new Walker_Nav_Menu_Edit()); echo walk_nav_menu_tree($menu_items, 0, (object) $args); } break; case 'add-meta': check_ajax_referer('add-meta', '_ajax_nonce-add-meta'); $c = 0; $pid = (int) $_POST['post_id']; $post = get_post($pid); if (isset($_POST['metakeyselect']) || isset($_POST['metakeyinput'])) { if (!current_user_can('edit_post', $pid)) { die('-1'); } if (isset($_POST['metakeyselect']) && '#NONE#' == $_POST['metakeyselect'] && empty($_POST['metakeyinput'])) { die('1'); } if ($post->post_status == 'auto-draft') {