web-dev-qa-db-fra.com

Multisite: définition du thème et des options lors de la création d'un nouveau blog

Lorsqu'un nouveau blog est créé dans une instance WP Multisite, je veux pouvoir définir le thème par défaut et les options de configuration.

  • créer 2 menus (principal et secondaire) et les associer aux 2 emplacements fournis par le thème

  • définir diverses options de thème telles que définies sur la page d'options de thème

Quel est le meilleur moyen d'y parvenir?

  • quel crochet devrais-je utiliser - je vais utiliser ceci: ('WP_DEFAULT_THEME', 'theme-folder-name' dans wp-config.php pour définir le thème par défaut - sauf si cela empêche un hook nécessaire de se déclencher.

  • le moyen le plus simple de créer des menus par programme et de les associer aux "emplacements" de menu de thème

2
anu

Le meilleur crochet que je peux trouver est wpmu_new_blog (ligne 1086, wp-includes/ms-functions.php, wpmu_create_blog()) - il passe 6 arguments comme ceci;

do_action( 'wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta );

$meta est un tableau d'options de site initiales, à ne pas confondre avec les options générées par populate_options().

La création par programme de menus de navigation peut s'avérer un peu délicate, car il n'y a pas d'API en tant que telle. Il s'agit d'un mélange de termes posts, meta et nav_menu, associés à quelques fonctions disponibles telles que is_nav_menu_item() et wp_setup_nav_menu_item().

Mon meilleur conseil serait de consulter wp-admin/nav-menus.php, car c’est là que réside tout le code fondamental pour la création de menus.

Utiliser WP_DEFAULT_THEME devrait convenir, et constitue probablement la meilleure approche également.

2
TheDeadMedic

C'est un peu tard, mais je devais trouver moi-même l'autre partie de cette question et je pensais la partager.

Pour créer un menu par défaut et le placer dans un emplacement de thème, vous devez disposer d'un emplacement préexistant dans le thème et vous assurer que les pages que vous avez liées dans votre menu sont également déjà créées.

Dans function.php de votre thème, enregistrez n'importe quel emplacement de menu. J'ai enregistré deux:

function my_register_navs() {
    register_nav_menus(
        array( 'header-menu' => __( 'Header Menu' )
        , 'footer-menu' => __( 'Footer Menu' ) )
    );
}
add_action( 'init', 'my_register_navs' );

Ensuite, vous devrez créer vos menus lors de la création du site. Je n'ai pas utilisé de crochet pour cela, mais à la place, j'ai appelé wpmu_create_blog manuellement, mais vous pouviez vous accrocher à wpmu_new_blog si vous préfériez.

// 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);

Enfin, vous devrez ajouter des éléments aux menus. Répétez ce code pour chaque élément de chaque menu.

// 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 );

J'espère que cela t'aides! Voici quelques références externes pour vous:

5
Eddie