programing

메뉴에 추가하지 않고 WordPress 관리 페이지를 추가하려면 어떻게 해야 합니까?

css3 2023. 4. 5. 22:08

메뉴에 추가하지 않고 WordPress 관리 페이지를 추가하려면 어떻게 해야 합니까?

WordPress 플러그인을 만들고 있는데 서브메뉴에서 접근할 수 없는 편집 항목 페이지가 있었으면 합니다.

이 리소스(http://codex.wordpress.org/Adding_Administration_Menus)에는 관리 페이지를 함수와 관련짓는 방법이 나와 있지만 메뉴 항목으로 추가하지 않고는 관련짓는 방법이 나와 있지 않습니다.

할 수 있을까?

감사합니다!

최고의 솔루션 http://wordpress.org/support/topic/add-backend-page-without-menu-item

add_submenu_page slug = slug slug = null slug slug slug slug

JS가 원하는 메뉴 항목(및 서브메뉴 항목)을 강조 표시할 필요가 없고 플러그인이 등록한 일반 메뉴(@Josh의 답변은 커스텀 포스트 타입에만 해당)에서 사용할 수 있는 방법을 드디어 발견했습니다.

등록하기만 그 후을 하면 됩니다.'submenu_file'filter를 눌러 등록을 해제하고 옵션으로 다른 하위 메뉴 항목을 강조 표시하도록 설정합니다.

function so3902760_wp_admin_menu() {

    // Register the parent menu.
    add_menu_page(
        __( 'Parent title', 'textdomain' )
        , __( 'Parent', 'textdomain' )
        , 'manage_options'
        , 'my_parent_slug'
        , 'display_my_menu'
    );

    // Register the hidden submenu.
    add_submenu_page(
        'my_parent_slug' // Use the parent slug as usual.
        , __( 'Page title', 'textdomain' )
        , ''
        , 'manage_options'
        , 'my_hidden_submenu'
        , 'display_my_submenu'
    );
}
add_action( 'admin_menu', 'so3902760_wp_admin_menu' );

function so3902760_wp_admin_submenu_filter( $submenu_file ) {

    global $plugin_page;

    $hidden_submenus = array(
        'my_hidden_submenu' => true,
    );

    // Select another submenu item to highlight (optional).
    if ( $plugin_page && isset( $hidden_submenus[ $plugin_page ] ) ) {
        $submenu_file = 'submenu_to_highlight';
    }

    // Hide the submenu.
    foreach ( $hidden_submenus as $submenu => $unused ) {
        remove_submenu_page( 'my_parent_slug', $submenu );
    }

    return $submenu_file;
}
add_filter( 'submenu_file', 'so3902760_wp_admin_submenu_filter' );

할 수 말하면 항목을 더 것 , 이 ,, (, (, (, (, (, (, (, (, (, (, 기, 기, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the, the,$_GETsuper-global을 지정하면 사용자가 특정 항목을 편집할 필요가 있음을 나타냅니다.

예를 들어 편집할 항목을 나열하는 페이지가 있을 수 있으며, '편집'을 누르면 항목의 ID만 현재 URL(쿼리 문자열)에 추가됩니다.

이 페이지를 표시하는 기능에서 ID가 정의되어 있는 경우 해당 항목을 편집할 수 있는 페이지를 제공합니다.

그렇지 않으면 목록 보기를 제공합니다.이것이 투고, 페이지 및 기타 커스텀 투고 타입의 방법입니다.

부모 slug = null인 add_pair_page

또는

메뉴 제목 = null인 add_menu_page

메뉴를 추가하지 않고 새 페이지를 만들 때 이 코드를 사용합니다.

add_action( 'admin_menu', 'register_newpage' );

function register_newpage(){
    add_menu_page($appname, $appname, 'administrator','custompage', 'custom');
    remove_menu_page('custom');
}

function custom()
{
echo "hai";
}

주의: 이 솔루션은 현재 메뉴 및 하위 메뉴 항목을 자동으로 설정하지 않습니다.숨겨진 페이지를 표시할 때 특정 메뉴를 현재 상태로 강조 표시하려면 다른 답변을 참조하십시오.

제 앞에 나온 답변들을 보면 여러 가지 방법이 있다는 것을 알 수 있습니다.하지만 제가 생각하는 가장 좋은 방법이 하나 더 있습니다.

의 값에 따라 페이지를 다르게 로드합니다.$_GETquery var도 하나의 옵션이지만, 일부 사람들이 찾고 있는 것이 아닐 수 있습니다.

★★★★★★에 관한 add_submenu_page()올바른 방향으로 가고 있지만, 앞의 제안에는 각각 문제가 있습니다. ★★$menu_title로로 합니다.null메뉴 항목이 표시되지 않도록 하는 것이 아니라 링크에 텍스트가 표시되지 않도록 하는 것입니다.링크는 아직 메뉴 공간을 차지하기 때문에 웃기게 보입니다.의 설정$parent_slug로로 합니다.null 이 을 알 수 .title$page_titlediscloss.discloss.

은 제제책 my my my my my my를 설정하는 이었다.$parent_slug 슬러그에 'i_dont_exist'메뉴 항목이 표시되지 않고 관리 화면을 표시하면 페이지 제목이 올바르게 입력됩니다.

add_submenu_page(
    '_doesnt_exist'
    ,__( 'Page title', 'textdomain' )
    ,''
    ,'manage_options'
    ,'menu_slug'
    ,'display_my_menu'
);

네. 서브메뉴나 WP 관리패널의 메인메뉴를 통해서도 페이지에 접근할 수 없도록 할 수 있습니다.아래의 코드 스니펫을 참조해 주세요.

function myplugin_render_edit_page() {
    // Code contains the UI for edit page.
}

/**
 * Manage menu items and pages.
 */
function myplugin_register_admin_page() {
    global $_registered_pages;

    $menu_slug = plugin_basename('myplugin.php');
    $hookname = get_plugin_page_hookname($menu_slug,'');
    if (!empty($hookname)) {
        add_action($hookname, 'myplugin_render_edit_page');
    }
    $_registered_pages[$hookname] = true;
}
add_action('admin_menu', 'myplugin_register_admin_page');

이게 도움이 됐으면 좋겠네요.

하위 메뉴 페이지 생성 및 부모 슬러그는 다음과 같이 비워 둡니다.

// Create page were you can add new users.
    public function add_create_user_menu() {
        add_submenu_page(
            '',
            'Create User',
            'Create User',
            'manage_options',
            'create-user',
            array( $this, 'add_create_user_page' )
        );
    }

다음과 같이 액세스 할 수 있습니다.

<a href="/wp-admin/admin.php?page=create-user">Add New</a>

저는 여기 있는 모든 제안들을 시도해 보았지만, 각각의 문제와 관련된 다양한 문제들을 가지고 있습니다.

이제 add_submenu_page의 WordPress 코덱스에 정답이 표시됩니다.즉, 옵션을 사용하는 것입니다.php를 부모 슬러그로 사용합니다.지어낸 이름을 사용했지만 권한 오류가 발생합니다.여러 위치에서 늘을 동일하게 사용하면 메뉴 텍스트가 표시되지 않거나(클릭 가능), 브라우저 제목이 사라집니다.

옵션 사용.php는 동작했지만 사용으로 인한 문제는 없었습니다.

add_submenu_page를 NULL의 부모와 함께 사용하는 것은 확실히 기능하지만, 특정 메뉴(커스텀 포스트 타입 메뉴 등)와 관련지어져 있지 않은 페이지를 유지하려면 @Boopathi의 답변을 사용해야 합니다.

function my_hidden_submenu_page(){
    //add the submenu page the usual way
    add_submenu_page('edit.php?post_type=custom-type', 'My Page Title', 'My Page Title', 'manage_options', 'my-page-slug', 'my_page_callback');
    //then remove it
    remove_submenu_page('edit.php?post_type=custom-type','my-page-slug');
}
add_action('admin_menu', 'my_hidden_submenu_page');

2개의 액션이 서로 취소되는 것처럼 보이지만 remove_submenu_page는 콜백함수의 등록을 해제하지 않고 링크만 삭제합니다.

이렇게 하면 다른 사용자가 링크되지 않은 페이지를 볼 때 올바른 탐색 메뉴(이 예에서는 사용자 지정 게시 유형 메뉴)가 활성 상태로 표시됩니다.

서브메뉴 항목의 부모 슬러그로 null을 추가하는 것만으로 문제가 발견된 것 중 하나는 현재 특정 페이지를 보고 있으면 서브메뉴 자체가 표시되지 않는다는 것입니다(적어도 페이지 제목은 표시되지 않음).

메뉴 제목에 빈 스팬 요소를 추가하고 jquery를 사용하여 상위 요소를 이동하고 숨깁니다.

이 요구는 현재 버전에서도 유효한 것 같습니다.사용하고 있다WordPress 5.3.2다음 방법을 사용하여 부모 이름을 가진 메뉴를 삭제했습니다.submenu.

add_action( 'admin_menu', 'submenus' ); 

function submenus()
    {
        global $submenu;

        $parent_slug = 'parent_slug_name';

        // remove parent named menu from submenu because it is always the first one in the submenu array, so the offset is 0 and remove just 1
        array_splice( $submenu[$parent_slug], 0, 1 ); // with reindex
        // or unset( $submenu[$parent_slug][0] ); // without reindex
    }

그것이 같은 목표를 달성하고자 하는 다른 사람들에게 도움이 되기를 바랍니다.

편집/추가됨

서브메뉴 외에 부모 메뉴도 같은 방법으로 갱신할 수 있습니다.부모 메뉴의 경우 글로벌 변수는 다음과 같습니다.$menu. 참조 예:

add_action( 'admin_menu', array( $this, 'modify_menu_title' ) );

function modify_menu_title() {
    global $menu;

    $page = 'some-page-slug';
    $new_menu_title = 'New Title Name';
    foreach( $menu as $key => $value ) {
        if( $menu[$key][2] === $page ) {
            $menu[$key][0] = $new_menu_title;
        }
    }
}

다음과 같이 insert id를 재사용하면 됩니다.

add_menu_page( 'User AS Packages', 'User AS', 'manage_options', 'myplugin/editaspackages.php', 'UserASPackages', '', 8);
add_menu_page( 'User ARP Packages', 'User ARP', 'manage_options', 'myplugin/editarppackages.php', 'UserARPPackages', '', 8);
add_menu_page( 'AS Packages', 'AS Packages', 'manage_options', 'myplugin/ars-s2.php', 'ARPPackages', '', 8);

위치 8을 사용하는 마지막 3과 마지막 1은 앞의 2를 덮어쓰기 때문에 앞의 2는 표시되지 않습니다.

언급URL : https://stackoverflow.com/questions/3902760/how-do-you-add-a-wordpress-admin-page-without-adding-it-to-the-menu