多站点:创建新博客时设置主题和选项

时间:2011-03-16 作者:anu

在WP Multisite实例中创建新博客时,我希望能够设置默认主题和配置选项

创建2个菜单(主菜单和次菜单),并将它们与主题提供的2个插槽相关联

设置主题选项页面上定义的各种主题选项

实现这一目标的最佳方式是什么?

我应该使用哪个钩子-我将使用它:(\'WP\\u DEFAULT\\u THEME\',\'THEME folder name\'在WP-config.php中设置默认主题-除非这样可以防止触发所需的钩子。

以编程方式创建菜单并将其与现有主题菜单“插槽”关联的最简单方法

3 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

我能找到的最好的钩子是wpmu_new_blog (第1086行,wp-includes/ms-functions.php, wpmu_create_blog()) - 它通过了6个这样的参数;

do_action( \'wpmu_new_blog\', $blog_id, $user_id, $domain, $path, $site_id, $meta );
$meta 是一组初始站点选项,不要与生成的选项混淆populate_options().

通过编程创建导航菜单可能有点棘手,因为没有这样的“API”——它们是post、post-meta和nav_menu 术语,再加上一些可用功能,如is_nav_menu_item()wp_setup_nav_menu_item().

我最好的建议是退房wp-admin/nav-menus.php, 因为这是创建菜单的所有核心代码所在。

使用WP_DEFAULT_THEME 应该可以,而且可能也是最好的方法。

SO网友:Eddie

这有点晚了,但我必须自己找出这个问题的另一部分,并想与大家分享。

要创建默认菜单并将其放置到主题位置,您需要在主题中预先存在一个位置,并且需要确保您在菜单中链接的任何页面也已创建。

在主题的功能中。php,注册任何菜单位置。我注册了两个:

function my_register_navs() {
    register_nav_menus(
        array( \'header-menu\' => __( \'Header Menu\' )
        , \'footer-menu\' => __( \'Footer Menu\' ) )
    );
}
add_action( \'init\', \'my_register_navs\' );
接下来,您需要在站点创建时创建菜单。我没有用钩子,而是打了电话wpmu_create_blog 手动,但您可以wpmu_new_blog 如果你愿意的话。

// Create the menus
$hdr_menu = array(
    \'menu-name\'     => \'Header Menu\'
    , \'description\' => \'The primary navigation menu for this website\'
);
$header_menu = wp_update_nav_menu_object( 0, $hdr_menu );

$ftr_menu = array(
    \'menu-name\'     => \'Footer Menu\'
    , \'description\' =>  \'The menu that appears at the bottom of most pages in this website\'
);
$footer_menu = wp_update_nav_menu_object( 0, $ftr_menu );

// Set the menus to appear in the proper theme locations
$locations = get_theme_mod(\'nav_menu_locations\');
$locations[\'header-menu\'] = $header_menu;
$locations[\'footer-menu\'] = $footer_menu;
set_theme_mod(\'nav_menu_locations\', $locations);
最后,您需要将项目添加到菜单中。对每个菜单中的每个项目重复此代码。

// Build menu item
$menu_item = array(
    \'menu-item-object-id\'       => $page_id
    , \'menu-item-parent-id\'     => 0
    , \'menu-item-position\'      => $menu_order
    , \'menu-item-object\'        => \'page\'
    , \'menu-item-type\'          => \'post_type\'
    , \'menu-item-status\'        => \'publish\'
    , \'menu-item-title\'         => $label
);

// Add to nav menu
wp_update_nav_menu_item( $header_menu, 0, $menu_item );
希望这有帮助!以下是一些外部参考资料:

SO网友:Wint
function mysite_wpmu_new_blog($blog_id)
{
    switch_to_blog($blog_id);
    switch_theme(\'my-theme\', \'my-theme\');
    restore_current_blog();
}

add_action(\'wpmu_new_blog\', \'mysite_wpmu_new_blog\');

This works for me!

结束