ความต้องการเกิดจากผมเขียนปลักอินตัวหนึ่งขึ้นมา ซึ่งมันมีหน้าที่เข้าไปปรับแต่งบางอย่างของออเดอร์ใน WooCommerce ทีนี้มันต้องมีหน้า settings เพื่อกำหนดค่าบางอย่าง ผมจึงต้องการเพิ่มเมนูใหม่สักอันเข้าไปภายใต้เมนูหลัก WooCommerce หน้าตามันเป็นอย่างนี้

เมนู My Options

วิธีการเขียนทำอย่างนี้

add_action('admin_menu', 'register_options_submenu_page',99);

เริ่มจากบอกว่า เมื่อเวิร์ดเพรสกำลังสร้างเมนูของแอดมิน ให้ไปเรียกฟังก์ชั่น register_options_submenu_page ของเราขึ้นมาทำงานด้วย โดยกำหนดความสำคัญไว้ที่ลำดับ 99

จากนั้น

function register_options_submenu_page() {
	add_submenu_page( 'woocommerce', 'My Options', 'My Options', 'manage_options', 'my-custom-submenu-page', 'options_submenu_page_content' );
}

ในฟังก์ชั่น register_options_submenu_page ของเราให้เรียกใช้ฟังก์ชั่น add_submenu_page ซึ่งคำสั่ง add_submenu_page นี้มันไว้ใช้สำหรับเพิ่มเมนูย่อยเข้าไปในเมนูที่ต้องการ ซึ่งในที่นี้เราต้องการให้เพิ่ม sub menu เข้าไปในเมนู woocommerce

สำหรับคำสั่ง add_submenu_page นั้น พารามิเตอร์ตัวแรก จะเป็นตัวระบุว่าจะให้ยัดเมนูย่อยเข้าไปในเมนูไหน พารามิเตอร์ตัวสุดท้าย จะเป็นตัวระบุฟังก์ชั่นสำหรับแสดงเนื้อหาเมื่อมีการคลิกที่เมนู จากคำสั่งข้างบนคือฟังก์ชั่น options_submenu_page_content

สุดท้ายแสดงเนื้อหาของเมนู

function options_submenu_page_content() {
   echo '<h3>Optoins</h3>';
}

ผลลัพธ์จะออกมาตามภาพ

My Options เมนู

โค้ดทั้งหมดจะเป็นดังนี้


add_action('admin_menu', 'register_options_submenu_page',99);

function register_options_submenu_page() {
	add_submenu_page( 'woocommerce', 'My Options', 'My Options', 'manage_options', 'my-custom-submenu-page', 'options_submenu_page_content' );
}

function options_submenu_page_content() {
	echo '<h3>Optoins</h3>';
}

ความรู้เพิ่มเติม

คำสั่ง add_submenu_page มันมีรายละเอียดดังนี้

add_submenu_page( string $parent_slug, string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '' )

-parent_slug : เมนูแม่ที่เราต้องการให้เมนูนี้เสียบเข้าไป
-page_title : คำที่ต้องการให้แสดงใน Title bar เมื่อคลิกที่เมนู
-menu_title : คำที่ต้องการให้แสดงในเมนู
-capability : ใครที่เราอนุญาติให้มองเห็นเมนูนี้บ้าง โดยปกติกำหนดเป็น manage_options ซึ่งแปลว่า admin
-menu_slug : slug ของเมนู จะต้องเป็นคำที่ไม่ซ้ำกับใครอื่น
-function : ฟังก์ชั่นที่จะให้เรียกใช้งานเมื่อแอดมินคลิกที่เมนู