サポート » テーマ » テーマインストール時に自動的にメニューを設定したい

  • 解決済 wackey

    (@wackey)


    現在WordPressマルチサイト環境向けのテーマを作成しています。

    1.固定ページ(プロフィールページ、お問い合わせページなどよくあるページ)を自動的に作成する
    2.それらを自動的にグローバルナビゲーション(ページヘッダーメニュー)に設定する
    を実現したいと考えています。

    1.については下記で実現可能そうなので、試して見ようと思います。
    wordpressネットワークでHELLO WORLDを変更してブログを作成 | Webエンジニアブログ http://dim5.net/wordpress/edit-hello-world.html

    2.については調べたり思いつく限り、方法が思い浮かばないので、ご存知の方いらっしゃいましたら、
    ご教示いただけると幸いです

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    wp_create_nav_menu() でメニューを、wp_update_nav_menu_item() でメニュー項目を作成することができます。

    例:

    function my_wpmu_new_blog( $blog_id ) {
    	switch_to_blog( $blog_id );
    
    	$menu = 'main';	// メニュー名
    
    	if ( ! is_nav_menu( $menu ) ) {
    
    		// 固定ページを作成
    		$post = array(
    			'post_content' => '本文です。',
    			'post_status' => 'publish',
    			'post_title' => 'プロフィール',
    			'post_type' => 'page',
    			'post_name' => 'profile',
    		);
    		$post_id = wp_insert_post( add_magic_quotes( $post ) );
    
    		// メニューを作成
    		$menu_id = wp_create_nav_menu( $menu );
    		if ( $menu_id ) {
    
    			if ( $post_id ) {
    				wp_update_nav_menu_item( $menu_id, 0, array(
    					'menu-item-title' => 'プロフィール',
    					'menu-item-object-id' => $post_id,
    					'menu-item-object' => 'page',
    					'menu-item-status' => 'publish',
    					'menu-item-type' => 'post_type',
    				) );
    			}
    
    			// メニューの位置 top にメニューを設定
    			$location = 'top';
    			$term = get_term_by( 'name', $menu, 'nav_menu' );
    			$locations = get_theme_mod( 'nav_menu_locations' );
    			$locations[$location] = $term->term_id;
    			set_theme_mod( 'nav_menu_locations', $locations );
    		}
    	}
    
    	restore_current_blog();
    }
    add_action( 'wpmu_new_blog', 'my_wpmu_new_blog' );
    wackey

    (@wackey)

    ありがとうございます!
    早速試して見たいと思います!

    wp_update_nav_menu_item()初めて知りました。いろいろ試して見たいと思います。

    wackey

    (@wackey)

    実装後にまた改めてご連絡いたします。取り急ぎのお礼まで。

    wackey

    (@wackey)

    ishitaka様

    お世話になっております。おかげさまで実現したいことが実現しました。
    ありがとうございました。

    ーーー
    1点別件で、これを入れたことによりサイト作成後、管理画面に入って直後にエラーが出るようになりました。
    このエラーについて何かご存知のことがあれば、教えていただけると幸いです。

    ( ! ) Fatal error: Uncaught Error: Call to a member function get_page_permastruct() on null in /app/public/wp-includes/link-template.php on line 376
    ( ! ) Error: Call to a member function get_page_permastruct() on null in /app/public/wp-includes/link-template.php on line 376

    本件は別スレで質問を立てます。
    まずはありがとうございました。

    wackey

    (@wackey)

    上記で書いた

    ーーー
    1点別件で、これを入れたことによりサイト作成後、管理画面に入って直後にエラーが出るようになりました。
    このエラーについて何かご存知のことがあれば、教えていただけると幸いです。

    ( ! ) Fatal error: Uncaught Error: Call to a member function get_page_permastruct() on null in /app/public/wp-includes/link-template.php on line 376
    ( ! ) Error: Call to a member function get_page_permastruct() on null in /app/public/wp-includes/link-template.php on line 376

    は別の問題のようでした。失礼しました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。