활성화 될 때 강조 표시 할 사용자 지정 관리자 하위 메뉴 항목 가져 오기


9

관리자 메뉴에 3 가지 분류법이있는 사용자 정의 게시물 유형 작업이 있습니다.

분류 체계 중 하나는 상태이며 활성 또는 닫힘입니다. 활성 작업 작업 아래에 메뉴 항목이 필요합니다. 이 코드로 만들었습니다.

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

활성 작업 메뉴 옵션이 활성화되어있을 때 작업 메뉴 항목이 강조 표시되는 것을 제외하고는 완벽하게 작동합니다. 스크린 샷보기

하위 메뉴 표시 예

이 기사에서 add_submenu_page ()사용 하여 부모 슬러그를 첫 번째 매개 변수로 포함시키지 않는 관리자 메뉴의 현재 클래스를 읽었습니다 . 파일 이름 슬러그를 제거 할 때 하위 메뉴가 올바른 탐색 섹션에 표시되는 방법을 모르겠습니다.

이 시점에서 콜백 함수를 사용하지 않고 표시된 게시물을 필터링하는 쿼리 매개 변수를 제외하고 기본 작업 하위 메뉴 옵션과 동일한 URL을 실행하고 있습니다. 이것을 콜백 함수로 옮기면 문제가 해결되면 할 수 있습니다. 그러나 콜백 함수에 무엇이 들어 가야할지 모르겠습니다. 분류 필터를 사용하여 표준 사용자 정의 게시물 유형 편집 페이지를 표시하고 싶습니다. 도움을 주셔서 감사합니다


나는 이것이 어려운 해결책이기 때문에 어떤 해결책이 나오는지 알고 싶습니다. '워드 프레스'방법은 스크린 샷에 표시된대로 드롭 다운 필터 메뉴를 추가하는 것입니다.
Stephen Harris

당신은 URL에 실수가 있습니다 'edit.php?&post_type=jobs&jobstatus=67' ... 처음에 &거기에해서는 안됩니다 ?..
Mark Duncan

마크-당신은 정확하고 위의 게시물과 라이브 사이트의 코드에서 변경했습니다. 그러나이 문제는 해결되지 않습니다. 지적 해 주셔서 감사합니다.
stvwlf

답변:


5

게시물 메뉴와 초안 상태를 사용하여이 작업을 수행했습니다. jQuery를 사용하여 목록 항목 클래스를 수정합니다. 게시물 유형 및 URL에 맞게 작업하십시오.

결과는 다음과 같습니다.
추가 초안 하위 메뉴 항목

add_action( 'admin_menu', 'wpse_44270_menu_admin' );
add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' );

function wpse_44270_menu_admin() 
{
    add_submenu_page(
        'edit.php',
        'Drafts', 
        '<span id="my-draft-posts">Drafts</span>', 
        'edit_pages', 
        'edit.php?post_status=draft&post_type=post'
    );
}

function wpse_44270_highlight_menu_item()
{
    global $current_screen;

    // Not our post type, exit earlier
    if( 'post' != $current_screen->post_type )
        return;

    if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] )
    {       
        ?>
        <script type="text/javascript">
            jQuery(document).ready( function($) 
            {
                var reference = $('#my-draft-posts').parent().parent();

                // add highlighting to our custom submenu
                reference.addClass('current');

                //remove higlighting from the default menu
                reference.parent().find('li:first').removeClass('current');             
            });     
        </script>
        <?php
    }
}

5

다음은 jQuery를 사용하지 않는 방금 설명한 솔루션입니다.

필터가 parent_file에서 wp-admin/menu-header.php메뉴를 출력하기 전에 바로 실행되는이. 인라인 주석은 다음과 같이 말합니다.

플러그인이 하위 메뉴 탭을 움직일 수 있습니다.

전역 변수에 대한 필터 일 뿐이며 그 기능이 $parent_file확실하지 않지만이 필터를 사용하여 전역 변수를 $submenu_file대신 변경 하여 강조 표시된 하위 메뉴를 설정합니다. 따라서 이것이 귀하의 경우 해결책이 될 것입니다.

add_filter('parent_file', 'wpse44270_parent_file');

function wpse44270_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['jobstatus']) && $_GET['jobstatus'] == 67) $submenu_file = 'edit.php?post_type=jobs&jobstatus=67';

    return $parent_file;
}

URL 형식에 맞게 적용 할 수 있습니다. 예를 들어 admin.php?page=my_plugin_slug&action=myaction플러그인의 하위 메뉴 형식 을 사용하여 하위 메뉴를 강조 표시하는 데 사용했습니다.

add_filter('parent_file', 'wpse44270_1_parent_file');

function wpse44270_1_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['page']) && isset($_GET['action'])) $submenu_file = $_GET['page'] . '&action=' . $_GET['action'];

    return $parent_file;
}

추신 : 또한 admin_menu설정 작업 을 시도했지만 $submenu_file내 경우 (사용자 정의 플러그인 페이지 / 슬러그)에서는 작동했지만 edit.php하위 메뉴 (귀하의 경우) 에서는 작동하지 않았습니다 . 그래서 나중에 실행되는 다른 작업 / 필터를 검색했으며 필터 parent_file였습니다.


0

귀하의 링크에 html 엔터티도 사용해야한다는 것을 알았습니다. 당신이 가지고 있기 때문에

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

앰퍼샌드를 해당 HTML 엔티티로 변경하려고 할 수 있습니다.

&amp;

그래서 당신은

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&amp;jobstatus=67'
);

이것은 나를 위해 일했다 ... 나는 또한 하위 메뉴와 부모 메뉴의 출력 문자열을 테스트하고 일치하는지 확인했다. 이것은이 물건을 확인하기위한 작은 유틸리티 기능 일 수 있습니다

add_filter( 'parent_file', 'test_taxonomy_highlight' );
function test_taxonomy_highlight( $parent_file ){
   global $submenu_file;
   echo '<pre>', var_dump( $submenu_file, htmlentities( $submenu_file ) ), '</pre>';
   echo '<pre>', var_dump( $parent_file, htmlentities( $parent_file ) ), '</pre>';
   return $parent_file;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.