[wp-hackers] Auto creating custom menu
Doug Stewart
zamoose at gmail.com
Wed Nov 16 16:42:26 UTC 2011
Here's what I do to set up a custom BuddyPress menu when I detect BP
as active. It seems pretty close to what you're doing. Maybe it'll
help.
$menuname = $lblg_themename . ' BuddyPress Menu';
$bpmenulocation = 'lblgbpmenu';
// Does the menu exist already?
$menu_exists = wp_get_nav_menu_object( $menuname );
// If it doesn't exist, let's create it.
if( !$menu_exists){
$menu_id = wp_create_nav_menu($menuname);
// Set up default BuddyPress links and add them to the menu.
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Home'),
'menu-item-classes' => 'home',
'menu-item-url' => home_url( '/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Activity'),
'menu-item-classes' => 'activity',
'menu-item-url' => home_url( '/activity/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Members'),
'menu-item-classes' => 'members',
'menu-item-url' => home_url( '/members/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Groups'),
'menu-item-classes' => 'groups',
'menu-item-url' => home_url( '/groups/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Forums'),
'menu-item-classes' => 'forums',
'menu-item-url' => home_url( '/forums/' ),
'menu-item-status' => 'publish'));
// Grab the theme locations and assign our newly-created menu
// to the BuddyPress menu location.
if( !has_nav_menu( $bpmenulocation ) ){
$locations = get_theme_mod('nav_menu_locations');
$locations[$bpmenulocation] = $menu_id;
set_theme_mod( 'nav_menu_locations', $locations );
}
}
On Wed, Nov 16, 2011 at 7:14 AM, Tom Barrett <tcbarrett at gmail.com> wrote:
> I am building a WordPress 'deployment system'. As part of this, I want: 1)
> install and activate a theme 2) create some pages 3) Add a custom menu with
> those pages. The first two steps are fine, and I can create the custom
> menu. But I cannot get the pages into the menu.
>
> How the automated part works, is that it creates wp-config.php file, and a
> PHP script in wp-admin that installs WordPress (calling wp_install()
> e.t.c). It then calls an action hook that is added in the theme's files.
>
> Something a bit like this:
>
> <?php
> // Script in wp-admin
> require_once( '../wp-load.php' );
> require_once( './includes/upgrade.php' );
> wp_install( ..... );
> do_action( 'setup_wordpress' );
> ?>
>
> <?php
> // Theme functions.php file
> add_action( 'setup_wordpress', 'do_setup_wordpress' );
> function do_setup_wordpress(){
> $mypages = make_three_pages_and_return_their_post_id(); // returns
> array( [0]=>3, [1]=>4, [2]=>5 )
> $mymenuname = 'My Menu';
> wp_create_nav_menu( $mymenuname );
> $menu = get_term_by( 'name', $mymenuname, 'nav_menu' );
> $menu_id = $menu->term_id;
>
> foreach( $mypages as $page_id ){
> $args = array(
> 'menu-item-object-id' => $page_id,
> 'menu-item-object' => 'page',
> 'menu-item-type' => 'post_type',
> 'menu-item-status' => 'publish',
> );
> $menu_item_id = wp_update_nav_menu_item( $menu_id, 0, $args );
> }
> }
> ?>
>
> It does everything except put the pages in the menu. The code works if I
> trigger it through browsing the site. EG: add_action( 'admin_init',
> 'do_setup_wordpress' ); (This is how I developed it initially).
>
> The $menu_item_id variable gets a value (usually 6,7,8).
>
> Any ideas what I'm missing or not doing? Am I just being crazy?
>
>
>
> --
> http://www.tcbarrett.com | http://gplus.to/tcbarrett |
> http://twitter.com/tcbarrett
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
--
-Doug
More information about the wp-hackers
mailing list