programing

Wordpress 관리 메뉴 항목을 수동으로 강조 표시합니다.

nicescript 2023. 4. 2. 13:27
반응형

Wordpress 관리 메뉴 항목을 수동으로 강조 표시합니다.

Wordpress Admin 페이지의 Pages 메뉴에서 다음과 같은 레이아웃을 얻었습니다.

페이지

  • 편집 (url: edit-pages.disples)
  • 신규 추가 (url: page-new.disples)
  • 스페셜 페이지(url: edit-pages.special-pages=true)

보시다시피 스페셜 페이지라고 하는 새로운 서브메뉴 아이템을 추가했습니다.이것은 커스텀 필터로 편집 페이지에의 링크입니다.Wordpress는 파일 이름을 사용하여 하위 메뉴 항목을 식별하고 강조 표시하기 때문에 Special Pages를 클릭할 때마다 Edit 하위 메뉴 항목이 선택됩니다.대신 Wordpress가 Special Pages 메뉴 항목을 선택하도록 강제할 수 있는 방법이 있습니까?

건배.

보다 나은 솔루션:

add_filter('parent_file', 'my_plugin_select_submenu');
function my_plugin_select_submenu($file) {
        global $plugin_page;
        if ('__my-current-submenu-slug__' == $plugin_page) {
            $plugin_page = '__my-submenu-slug-to-select__';
        }
        return $file;
}

Ken Vu의 답변을 더욱 명확히 하기 위해 글로벌 변수를 편집하십시오.$submenu_file그리고.$parent_file예를 들어, 페이지를 강조 표시하려면:

global $submenu_file;
$submenu_file = "edit-pages.php?special-pages=true";

강조 표시된 최상위 항목을 변경해야 할 경우$parent_file. 예: "Writing" 설정 페이지를 강조 표시합니다.

global $parent_file;
global $submenu_file;
$parent_file = 'options-general.php';
$submenu_file = 'options-writing.php';

해결책: $submenu_file 변수 사용

$sec_file = "edit-pages.secial-pages=true"

Ken Vu와 Jonathan Brinley에게 감사합니다.당신의 답변으로 드디어 관리 메뉴의 하이라이트가 제대로 작동하게 되었습니다.작동시키기 위해 조금 애를 먹었기 때문에, 다른 사람들이 더 쉽게 찾을 수 있도록 전체 결과를 여기에 올리려고 했습니다.

이 아이디어는,parent_file필터(문서화되어 있지 않은 Word press 부품 수)제 경우 커스텀 투고 타입을 작성할 때 생성되는 기본값이 아닌 커스텀 메뉴를 추가하고 있었습니다.

제 커스텀 우편번호로add_meta_boxes액션.이 훅 내에서 콜을 발행합니다.parent_file필터:

add_filter('parent_file',     array(&$this, 'highlight_admin_menu'));

_

그럼 이렇게 해서hightlight_admin_menu함수는 다음과 같습니다.

function highlight_admin_menu($some_slug){

  global $parent_file;

  $parent_file = 'post.php?post=149&action=edit';

  return $parent_file;
}

_

이렇게 하면 메뉴가 제대로 강조 표시됩니다.사용자 고유의 코드를 사용하여 이 코드를 어디서 발행해야 하는지 확인해보십시오.add_filter('parent_file', ...)코드. 특정 페이지 로드에서만 실행되는 코드를 찾습니다. 하지만 머지않아 여전히 수정이 가능합니다.$parent_file변수.

도움이 됐으면 좋겠네요!

하위 메뉴 항목의 강조 표시된 메뉴 항목을 변경하려면 적절한 필터는 다음과 같습니다.submenu_file.

add_filter('submenu_file', 'menuBold');

static function menuBold($submenu_file)
{
    if ( checkProperPage($_GET) ) {
        // The address of the link to be highlighted
        return 'post-new?post_type=foobar&foo=bar';
    }

    // Don't change anything
    return $submenu_file;
}

체크는 WP에서 이루어집니다.~/wp-admin/menu-header.php194행 파일(Wordpress 4.5.3):

if ( isset( $submenu_file ) ) {
    if ( $submenu_file == $sub_item[2] )
        $class[] = 'current';
...
}

이 코드를 수정하여 사용할 수 있습니다.이를 통해 부모 및 하위 메뉴를 모두 변경할 수 있습니다.테스트 완료 코드

function change_active_parent($submenu_file)
{ 
    global $parent_file;

    $zone = 'edit-tags.php?taxonomy=zone&post_type=product';
    $storefront = 'edit-tags.php?taxonomy=storefront&post_type=product';
    $container = 'edit-tags.php?taxonomy=container&post_type=product';
    
    if (esc_html($zone) == $submenu_file) {
        $parent_file = 'parent';
        $submenu_file = $zone;
    }
    elseif (esc_html($storefront) == $submenu_file) {
        $parent_file = 'parent';
        $submenu_file = $storefront;
    }
    elseif (esc_html($container) == $submenu_file) {
        $parent_file = 'parent';
        $submenu_file = $container;
    }
    
    return $submenu_file;
}

add_filter( 'submenu_file', 'change_active_parent' );

를 사용합니다.load-{$page_hook}action hook 및 필요한 글로벌 변경:

/**
 *  For giggles, lets make an admin page that is not "in the menu" to play with.
 */
add_action('admin_menu', 'mort1305_admin_menu');
function mort1305_admin_menu() {
    add_submenu_page(
        NULL,
        'Page Title',
        '',
        'administrator',
        'my_slug',
        'mort1305_page_content'
    );
}

/**
 *  The menu item to highlight and the submenu item to embolden.
 */
add_action('load-admin_page_my_slug', 'mort1305_on_page_load');
function mort1305_on_page_load(){
    global $plugin_file, $submenu_file, $title;
    $plugin_page = 'slug-of-menu-item-to-be-highlighted';
    $submenu_file = 'slug-of-submenu-item-to-be-bold';
    foreach($submenu[NULL] as $submenu_arr) {
        if($submenu_arr[2] === 'test_page_slug') {
            $title = $submenu_arr[3];
            break;
        }
    }
}

/**
 *  Page content to display.
 */
function mort_1305_page_content() {
    echo This is the '. get_admin_page_title() .' page.  The slug of my parent is '. get_admin_page_parent() .'.';
}

언급URL : https://stackoverflow.com/questions/2308569/manually-highlight-wordpress-admin-menu-item

반응형