programing

워드프레스 관리자:Custom Post Type(사용자 지정 게시 유형)을 상위 메뉴의 하위 메뉴로 배치할 때 상위 메뉴 링크가 CPT에 의해 재정의됩니다.

stoneblock 2023. 9. 21. 20:03

워드프레스 관리자:Custom Post Type(사용자 지정 게시 유형)을 상위 메뉴의 하위 메뉴로 배치할 때 상위 메뉴 링크가 CPT에 의해 재정의됩니다.

Custom Post Type(사용자 지정 게시 유형)을 등록하고, 고유한 메뉴가 있는 것을 원하지 않으며, 대신 다음과 같은 기존 관리 메뉴 항목의 하위 메뉴로 배치합니다.my-custom-parent-page.

제 암호는 이렇습니다.

register_post_type('my_custom_post_type',
    array(
        'labels' => array(              
            'name'               => __('Books', 'mcpt'),
            'singular_name'      => __('Book', 'mcpt'),
        ),
        'supports' => array('title', 'editor'),
        'show_ui' => true,
        'show_in_nav_menus' => false,
        'show_in_menu' => 'my-custom-parent-page',
    )
);

메뉴 아래에 제대로 위치해 있다는 뜻으로 작동합니다.my-custom-parent-page, 그러나 이제 부모 메뉴를 클릭하면(즉,)my-custom-parent-page) 그것은 나를 가리킵니다.my_custom_post_type페이지...

도와줄 사람?

기존 상위 페이지의 하위 메뉴에 사용자 지정 게시 유형 배치

Codex에 따르면, 이는 알려진 행동이고 예상되는 행동은 다음과 같습니다.

참고: 플러그인이 만든 메뉴 페이지의 하위 메뉴로 표시하기 위해 'some string'을 사용할 때 이 항목은 첫 번째 하위 메뉴 항목이 되며, 최상위 링크의 위치를 대체합니다.

출처 : https://codex.wordpress.org/Function_Reference/register_post_type#Arguments ("show_in_menu" 섹션 참조)

다음은 다음과 같은 해결책을 제시하는 인용문의 끝 부분입니다.

이를 원하지 않으면 메뉴 페이지를 생성하는 플러그인은 add_action 우선 순위를 admin_menu에 대해 9 이하로 설정해야 합니다.

그래서 이것은 꽤 간단하게 해결할 수 있습니다.하지만 제 경우에는 부모 페이지가 타사 라이브러리에서 생성되기 때문에 우선 순위를 변경할 수 없었습니다.그래서 저는 다음과 같은 해결책을 생각해 냈습니다.

// Move the "example_cpt" Custom-Post-Type to be a submenu of the "example_parent_page_id" admin page.
add_action('admin_menu', 'fix_admin_menu_submenu', 11);
function fix_admin_menu_submenu() {

    // Add "Example CPT" Custom-Post-Type as submenu of the "Example Parent Page" page
    add_submenu_page('example_parent_page_id', 'Example CPT', 'Example CPT', 'edit_pages' , 'edit.php?post_type=example_cpt');
}

우선순위 11, Custom-Post-Type 등록 시 "을 설정합니다.show_in_menu" 에 매개 변수를 지정합니다.false, 그래서 우리는 그것을 메뉴에 수동으로 추가할 수 있습니다.add_submenu_page위와 같이


Custom-Post-Type 하위 메뉴 항목을 "Active"로 적절히 설정

이제 위 솔루션은 정상적으로 작동하지만, "example_cpt" Custom-Post-Type" 게시물을 생성/편집할 때 활성으로 설정되지 않고 하위 메뉴가 펼쳐지지 않습니다.다음은 "example_cpt" Custom-Post-Type" 게시물을 작성/편집할 때 해당 게시물이 활성으로 설정되었는지 확인하는 방법입니다.

// Set the "example_parent_page_id" submenu as active/current when creating/editing a "example_cpt" post
add_filter('parent_file', 'fix_admin_parent_file');
function fix_admin_parent_file($parent_file){
    global $submenu_file, $current_screen;

    // Set correct active/current menu and submenu in the WordPress Admin menu for the "example_cpt" Add-New/Edit/List
    if($current_screen->post_type == 'example_cpt') {
        $submenu_file = 'edit.php?post_type=example_cpt';
        $parent_file = 'example_parent_page_id';
    }
    return $parent_file;
}

미세 조정: 첫 번째 하위 메뉴 항목 이름 변경

또한, 제 하위 메뉴의 첫 번째 메뉴 항목에 부모 이름과 다른 이름을 붙였으면 했습니다.기본적으로 위의 코드를 사용하면 다음과 같습니다.

- Example Parent Page
-- Example Parent Page
-- Example CPT

보다시피 하위 메뉴의 첫 번째 메뉴 항목은 상위 메뉴의 복제이며 기본 WordPress 동작입니다.이 중복 항목의 이름을 워드프레스가 기본 메뉴(예: "게시물"과 하위 메뉴 항목(둘 다 같은 페이지를 가리키지만 이름이 다른 "모든 게시물")와 같이 다른 이름으로 바꾸고 싶었습니다.

다음은 첫 번째 하위 메뉴 항목의 이름을 변경하는 방법입니다.

add_action('admin_menu', 'rename_first_submenu_entry', 11);
function rename_first_submenu_entry() {

    // Rename first submenu entry (duplicate of parent menu) from "Example Parent Page" to "Submenu Text"
    add_submenu_page('example_parent_page_id', 'Example Parent Page', 'Submenu Text', 'edit_pages' , 'example_parent_page_id');

}

우선순위 11이 생성된 후 이름이 변경되도록 유의하시기 바랍니다.이제 우리는 다음과 같습니다.

- Example Parent Page
-- Submenu Text
-- Example CPT

하위 메뉴 텍스트는 "부모 페이지 예시"와 같은 위치를 가리킵니다.

를 .'show_in_menu' 지정 합니다 args to에를 합니다.$menu_slugt.add_menu_page()CPT를 의 하위 메뉴로 설정하고 admin_menu 기능의 우선 순위를 9 이하로 설정할 것.예를 들어,

먼저 우선 순위가 9 이하로 설정된 새 최상위 메뉴 페이지를 만듭니다(필수 항목입니다).

add_action( 'admin_menu', 'settings_menu' ), 9 );

function settings_menu() {

    add_menu_page( __( 'Page Title' ), 'Menu Title', 'manage_options', 'menu_slug', show_page_callback() );
}

function show_page_callback() {

    // show the settings page, plugin homepage, etc.
}

그런 '를 'show_in_menu' arg로 지정 . 를.menu_slug가 막 t.settings_menu()기능.

add_action( 'init', 'create_post_type' );

function create_post_type() {

register_post_type('my_custom_post_type',
    array(
        'labels' => array(              
            'name'               => __('Books', 'mcpt'),
            'singular_name'      => __('Book', 'mcpt'),
        ),
        'supports' => array('title', 'editor'),
        'public' => true,
        'show_in_menu' => 'menu_slug',
    );
}

도움이 되길 바랍니다.

정확히 이유가 무엇인지 말할 수는 없지만 워드프레스가 첫번째 하위메뉴 항목으로 리디렉션되는 것 같습니다.

따라서 상위 메뉴 항목과 동일한 내용의 하위 메뉴 항목을 새로 만들어야 합니다.

add_action('admin_menu', 'my_admin_menu');

function my_admin_menu() {
    global $submenu;
    add_menu_page('My Menu', 'My Menu', 'administrator', 'my-menu', 'callback_func');

    $parent = array('My Menu', 'administrator', 'my-menu', 'My Menu'); // new submenu-itm
    $submenu['my-menu'] = fix_menu($submenu['my-menu'], $parent); // adds the new submenu-item at beginning of 'my-menu'-item
}

function fix_menu($submenu) {
    array_unshift ($submenu, $parent);
    return $submenu;
}

당신에게 효과가 있기를 바랍니다.

언급URL : https://stackoverflow.com/questions/21927445/wordpress-admin-when-placing-a-custom-post-type-as-a-submenu-of-a-parent-menu