ProgramingTip

메뉴에 추가하지 않고 WordPress

bestdevel 2020. 12. 29. 07:42
반응형

메뉴에 추가하지 않고 WordPress


WordPress를 구축 중이며 하위 메뉴를 통해 도달 할 수없는 항목 편집 페이지를 갖고 싶어합니다.

이 리소스 ( http://codex.wordpress.org/Adding_Administration_Menus )는 관리 페이지를 기능과 연결하는 방법을 보여 주지만 메뉴 항목으로 추가하지 않고 연결하는 방법을 보여줍니다.

할 수 있습니까?

감사합니다!


예, 가능합니다 (기술적으로는 모든 것을 등록한 다음 나중에 메뉴 항목을 제거하는 것과 관련 할 것입니다).하지만 $_GET슈퍼 글로벌 에서 많은 변수를 확인 하여 표시 하는 것이 가장 쉬울 것입니다. 사용자가 특정 항목을 편집하기를 원합니다.

예를 들어 편집 할 항목을 할 수 있고 '편집'을 클릭하면 현재 URL (query-string)에 항목의 ID 만 추가됩니다.

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

명명 된 목록보기를 제공하십시오. 게시물, 페이지 및 기타 사용자 지정 게시물 유형이 수행하는 방식입니다.


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

add_submenu_page부모 슬러그 = null과 함께 사용


add_submenu_page with parent slug = null

또는

메뉴 제목이 null 인 add_submenu_page


나는 추종하다 최종 악한이 실행 된 JS가 원하는 메뉴 항목 (및 하위 메뉴 항목)을 강조 표시하고 해킹에 등록 된 일반 메뉴에서 작동하는 방법을 발견했습니다 ( @Josh의 대답 은 사용자 포스트 포스트).

기본적으로 하위 메뉴를 등록하고 'submenu_file'필터에 연결하여 등록을 취소하고 선택적으로 하위 메뉴를 강조 표시합니다.

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' );

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

제 앞에 다가온 대답을 보면 여러 가지 방법이 있음을 알 수 있습니다. 하지만 최고라고 생각하는 또 다른 방법이 있습니다.

$_GET쿼리 변수 의 값에 따라 페이지를 다르게로드하는 것은 하나의 옵션이지만 일부 사람들이 찾는 것이 아닐 수도 있습니다.

에 관한 제안 add_submenu_page()올바른 방향으로 진행되고 있습니다. 설정 $menu_titlenull표시되는 메뉴 항목을 유지하지 않고 그냥 그렇게 링크 텍스트가 없습니다. 링크는 여전히 메뉴에서 약간의 공간을 차지하고 재미있어 보입니다. 을 설정 $parent_slug하는데이 null문제를 가지고,하지만 난 페이지의 HTML이 텍스트를 title언어로 표시하지 않습니다 $page_title.

내 해결은 $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');

도움이 되길 바랍니다.


메뉴에 추가하지 않고 새 페이지를 만들려면이 코드를 사용하십시오.

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";
}

하위 메뉴 페이지를 만들고 부모 슬러그를 다음과 같이 비워 둡니다.

// 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 코덱은 이제 options.php를 부모 슬러그로 사용하는 정답을 제공합니다. 내가 만든 이름을 사용하는 트릭을 시도했지만 권한 오류가 발생하고 다양한 위치에서 똑같이 null을 사용하면 메뉴 텍스트가 단순히 누락되거나 (여전히 클릭 가능) 브라우저 제목이 누락됩니다.

options.php를 사용하면 효과가 있었고 사용 결과로 문제가 발생하지 않았습니다.


NULL의 부모와 함께 add_submenu_page를 사용하면 확실히 작동하지만 특정 메뉴 (예 : 사용자 지정 게시물 유형 메뉴)와 연결된 링크되지 않은 페이지를 유지하려면 @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');

두 액션이 서로를 취소하는 것처럼 보이지만 remove_submenu_page 는 콜백 함수를 등록 해제하지 않습니다. 링크 만 제거합니다.

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


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

내가 한 일은 메뉴 제목 안에 빈 범위 요소를 추가하고 jquery를 사용하여 부모 요소를 탐색하고 숨기는 것입니다.


다음과 같이 삽입 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

반응형