web-dev-qa-db-ja.com

マルチサイト:新しいブログが作成されたときのテーマとオプションの設定

WP Multisiteインスタンスに新しいブログが作成されたら、デフォルトのテーマと設定オプションを設定できるようにしたいです。

  • 2つのメニュー(メインとセカンダリ)を作成し、それらをテーマによって提供される2つのスロットに関連付けます

  • テーマオプションページで定義されているように、さまざまなテーマオプションを設定します。

これを達成するために行くための最善の方法は何ですか?

  • どのフックを使用するべきですか - 私はこれを使用するつもりです:( 'WP_DEFAULT_THEME'、デフォルトテーマを設定するためのwp-config.phpの 'theme-folder-name' - これが必要なフックの起動を妨げない限り。

  • プログラムでメニューを作成し、それらを既存のテーマメニューの「スロット」に関連付ける最も簡単な方法

2
anu

私が見つけることができる最高のフックはwpmu_new_blog(行1086、wp-includes/ms-functions.phpwpmu_create_blog())です - それはそのように6つの引数を渡します。

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

$metaは初期サイトオプションの配列です。populate_options()によって生成されるオプションと混同しないでください。

プログラムとしてナビゲーションメニューを作成することは、 'API'が存在しないため、やや複雑になることがあります。これらは、投稿、投稿メタ、およびnav_menuの用語と、is_nav_menu_item()およびwp_setup_nav_menu_item()などの使用可能な機能の組み合わせです。

wp-admin/nav-menus.phpをチェックアウトすることをお勧めします。これが、メニューを作成するためのすべてのコアコードが存在する場所であるためです。

WP_DEFAULT_THEMEの使用は問題ないはずですし、おそらくこれも最善の方法です。

2
TheDeadMedic

これは少し遅れていますが、私は自分自身でこの質問の他の部分を理解しなければならず、私は共有すると思いました。

デフォルトメニューを作成してテーマの場所に配置するには、テーマ内に既存の場所が必要です。また、メニュー内でリンクしているページも既に作成されていることを確認する必要があります。

テーマのfunction.phpに、メニューの場所を登録します。私は2つ登録しました:

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

お役に立てれば!ここにあなたのためのいくつかの外部参照があります:

5
Eddie