add_menu_page

add_menu_page(string $page_title, string $menu_title,string $capability, string $menu_slug, callable $function = ”, string $icon_url = ”, int $position = null)

اضافه کردن یک منو در پنل مدیریت.

توضیحات

با استفاده از این تابع می‌توان یک آیتم منو در بخش مدیریت ایجاد کرد و برای هر آیتم منو می‌توان یک صفحه در بخش مدیریت ایجاد نمود. این تابع بررسی می‌کند که کاربر قابلیت دیدن صفحه را دارد یا خیر.

پارامترها:

page_title: عنوان صفحه که در تگ title نوشته می‌شود را باید وارد کنید. این عنوان زمانی که منو انتخاب می‌شود نمایش داده می‌شود. این مقدار ضروری(Required) است و از نوع رشته(string) می‌باشد.

menu_title: متنی که به عنوان منو می باشد. ضروری است و از نوع رشته ای است.

capability: این پارامتر ضروری است و برای این منو به کاربر نمایش داده می‌شود.

menu_slug: مقدار slug که به این منو اشاره می‌کند. این مقدار باید یکتا باشد و فقط برای این منو و صفحه استفاده می‌شود این پارامتر ضروری و متنی است. مقدار این پارامتر شامل الفبا، خط فاصله، و خط زیر باشد این مقدار باید با تابع sanitize_key مطابقت داشته باشد.

function: نام تابعی که قابلیت فراخوانی و نمایش خروجی برای این صفحه می‌باشد.(اختیاری و قابل فراخوانی). مقدار پیش فرض:”

icon_url: آدرس آیکنی که برای منو می‌خواهید استفاده کنید(اختیاری- قابل فراخوانی)

برای این پارامتر می توان از SVG استفاده کرد و یا از آیکن های تعریف شده در وردپرس که در کلاس Dashicons استفاده کنید. به عنوان مثال dashicons-chart-pie.

مقدار پیش فرض را خالی رها کنید تا یک آیکن پیش فرض در آن ثبت شود.

position: موقعیت قرار گیری منو در بین منوهای مدیریت وردپرس.(اختیاری)( مقدار عددی). مقدار پیش فرض: null

مقدار بازگشت

نتیجه این تابع یک صفحه hook_suffix (متنی)است.

منبع:

File: wp-admin/includes/plugin.php

function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) {
    global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages;
 
    $menu_slug = plugin_basename( $menu_slug );
 
    $admin_page_hooks[ $menu_slug ] = sanitize_title( $menu_title );
 
    $hookname = get_plugin_page_hookname( $menu_slug, '' );
 
    if ( ! empty( $function ) && ! empty( $hookname ) && current_user_can( $capability ) ) {
        add_action( $hookname, $function );
    }
 
    if ( empty( $icon_url ) ) {
        $icon_url   = 'dashicons-admin-generic';
        $icon_class = 'menu-icon-generic ';
    } else {
        $icon_url   = set_url_scheme( $icon_url );
        $icon_class = '';
    }
 
    $new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $icon_class . $hookname, $hookname, $icon_url );
 
    if ( null === $position ) {
        $menu[] = $new_menu;
    } elseif ( isset( $menu[ "$position" ] ) ) {
        $position            = $position + substr( base_convert( md5( $menu_slug . $menu_title ), 16, 10 ), -5 ) * 0.00001;
        $menu[ "$position" ] = $new_menu;
    } else {
        $menu[ $position ] = $new_menu;
    }
 
    $_registered_pages[ $hookname ] = true;
 
    // No parent as top level
    $_parent_pages[ $menu_slug ] = false;
 
    return $hookname;
}

یک مثال که به کاربر اجازه می دهد داده ها را ذخیره کند.

// Register settings using the Settings API 
function wpdocs_register_my_setting() {
    register_setting( 'my-options-group', 'my-option-name', 'intval' ); 
} 
add_action( 'admin_init', 'wpdocs_register_my_setting' );
 
// Modify capability
function wpdocs_my_page_capability( $capability ) {
    return 'edit_others_posts';
}
add_filter( 'option_page_capability_my-options-group', 'wpdocs_my_page_capability' );

ساختار منوها در وردپرس

پیش فرض: منوها انتهای لیست اضافه می شود.

2 – Dashboard
4 – Separator
5 – Posts
10 – Media
15 – Links
20 – Pages
25 – Comments
59 – Separator
60 – Appearance
65 – Plugins
70 – Users
75 – Tools
80 – Settings
99 – Separator

برای منو وردپرس شبکه ای مقدارهای متفاوت است:

2 – Dashboard
4 – Separator
5 – Sites
10 – Users
15 – Themes
20 – Plugins
25 – Settings
30 – Updates
99 – Separator

مثال: کد زیر یک آیتم منو به منو ادمین وردپرس، با قابلیت مشاهده مدیریت اضافه می کند.

روش اول:

/**
 * Register a custom menu page.
 */
function wpdocs_register_my_custom_menu_page() {
    add_menu_page(
        __( 'Custom Menu Title', 'textdomain' ),
        'custom menu',
        'manage_options',
        'myplugin/myplugin-admin.php',
        '',
        plugins_url( 'myplugin/images/icon.png' ),
        6
    );
}
add_action( 'admin_menu', 'wpdocs_register_my_custom_menu_page' );

با این روش از کدنویسی شما باید یک پلاگین ایجاد کنید مثلا : myplugin/myplugin-admin.php

 
< ? php esc_html_e( 'Admin Page Test', 'textdomain' ); ? >

روش دوم:

/**
 * Register a custom menu page.
 */
function wpdocs_register_my_custom_menu_page(){
    add_menu_page( 
        __( 'Custom Menu Title', 'textdomain' ),
        'custom menu',
        'manage_options',
        'custompage',
        'my_custom_menu_page',
        plugins_url( 'myplugin/images/icon.png' ),
        6
    ); 
}
add_action( 'admin_menu', 'wpdocs_register_my_custom_menu_page' );
 
/**
 * Display a custom menu page
 */
function my_custom_menu_page(){
    esc_html_e( 'Admin Page Test', 'textdomain' );  
}

دیدگاهتان را بنویسید