[BuddyPress] ナビメニューとサブメニューに新規メニューを追加する

2019-05-08WordPressBuddyPress,プラグイン

ナビメニューというのかな?なんていう名称か分からないけど、ユーザー名の下にあるタブになっているメニューに自作の新規メニューを追加する方法
BuddyPress add nav menu items
BuddyPress add nav menu items

コードは/wp-content/plugins/bp-custom.phpに記載する(なければ新しく作ること)

WordPress バージョン 5.1.1 BuddyPress バージョン 4.3.0 テーマ「Customify」 バージョン: 0.3.1

やること

  • サイト管理者は、登録メンバーのToDoメニューの「タスク追加」からメンバー各々に必要なタスクを入力する
  • 「タスク追加」はサイト管理者にのみ表示
  • 登録メンバーはToDoメニューの「タスク一覧」からタスクを確認する

ナビメニュー作成

bp_core_new_nav_item():ナビメニューを追加する関数

ナビメニューに新たに「ToDo」というメニューを追加する


// 新規ナビメニュー「ToDo」追加
add_action( 'bp_setup_nav', 'todo_nav');
function todo_nav() {
	global $bp;
	bp_core_new_nav_item( array(
	  	// メニューに表示される名前
		'name'            => 'ToDo',
		'slug'            => 'todo',
		// 表示場所 数字が大きいほど右に表示される(デフォルト:99)
		'position' => 55,
		'screen_function' => 'todo',
		'show_for_displayed_user' => true,
		// メニュー初期表示時(「ToDo」をクリックしたとき)にどのサブメニューを表示するか
		'default_subnav_slug' => 'task_list',
		'item_css_id' => 'todo'
	));
}

サブメニュー作成

bp_core_new_subnav_item():サブメニューを追加する関数

サブメニュー「タスク一覧」作成

ナビメニュー作成でメニューバーに新しく「ToDo」が追加されたので、サブメニュー「タスク一覧」を作る

// サブメニュー「タスク一覧」追加
add_action('bp_setup_nav', 'task_list_subnav', 100 );
function task_list_subnav() {
	global $bp;
	bp_core_new_subnav_item( array(
		'name' => 'タスク一覧',
		// サブメニューのURLを指定
		'slug' => 'task_list',
		// 親ページのURL
		'parent_url' => trailingslashit( $bp->displayed_user->domain . 'todo' ),
		'parent_slug' => 'todo',
		// 使用するサブメニューの関数名
		'screen_function' => 'task_list',
		'position' => 50
		)
	);
}
// 「タスク一覧」の関数
function task_list() {
 	// ページタイトル
	add_action( 'bp_template_title', 'task_list_title' );
	// 表示するページ内容
	add_action( 'bp_template_content', 'task_list_content' );
	// テンプレートファイルのロード (メンバーページのファイルを読んでいる)
	bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
}
// ページタイトルの中身
function task_list_title() {
	echo '

タスク一覧

'; } // ページ内容 function task_list_content() { include_once "buddypress/custom_nav/task_list.php"; }

ページ内容は別ファイルにして/plugins/buddypress/custom_navフォルダに格納し(フォルダは新規作成)、include_onceで読み込み.
簡単な内容であればここにコード(例:echo '<p>Hello!</p>';)を書いてもいい

サブメニュー「タスク追加」を追加

サブメニュー「タスク追加」を作成、およびサイト管理者にのみ表示されるよう設定する

// サブメニュー「タスク一追加」追加
add_action('bp_setup_nav', 'add_task_subnav', 200 );
function add_task_subnav() {
	global $bp;
	bp_core_new_subnav_item( array(
		'name' => 'タスク追加',
		'slug' => 'add_task',
		// 親ページのURL
		'parent_url' => trailingslashit( $bp->displayed_user->domain . 'todo' ),
		'parent_slug' => 'todo',
		'screen_function' => 'add_task',
		// 管理者でログインしている場合のみ表示
		'site_admin_only' => true,
		'position' => 60
		)
	);
}
// 「タスク追加」関数
function add_task() {
	// ページタイトル
	add_action( 'bp_template_title', 'add_task_title' );
	// 表示するページ内容
	add_action( 'bp_template_content', 'add_task_content' );
	// テンプレートファイルのロード
	bp_core_load_template( apply_filters('bp_core_template_plugin','members/single/plugins'));
}
// ページタイトルの中身
function add_task_title() {
	echo '

タスク追加

'; } // ページ内容 function add_task_content() { include_once "buddypress/custom_nav/add_task.php"; }

オプションで、'site_admin_only' => true とすると、ログインユーザーがサイト管理者のときのみ、このサブメニューが表示される。非管理者としてログインすると非表示となる

サイト管理者でログインしたとき

bp site_admin_only admin
bp site_admin_only admin

非管理者でログインしたとき

bp site_admin_only nonadmin
bp site_admin_only nonadmin

Posted by Agopeanuts