[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 '<h3>タスク一覧</h3>';
}

// ページ内容
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 '<h3>タスク追加</h3>';
}
// ページ内容
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