programing

WordPress 4.0에서 하위 메뉴 페이지 "customize.php" 제거

starjava 2023. 3. 23. 22:13
반응형

WordPress 4.0에서 하위 메뉴 페이지 "customize.php" 제거

WP 3.9.2를 실행하고 있을 때 아래 코드를 사용하여 관리 메뉴의 외관에서 Customize 메뉴 항목을 삭제할 수 있었습니다.

function remove_customize() {
  remove_submenu_page('themes.php', 'customize.php');
}
add_action('admin_init', 'remove_customize', 999);

4.0으로 업데이트하면 더 이상 작동하지 않습니다.

다음 위치에서 WordPress 4.1, 4.0 및 3.x와 함께 작동합니다.

편집: WordPress 4.1 호환성을 위해 조정됨:

function remove_customize() {
    $customize_url_arr = array();
    $customize_url_arr[] = 'customize.php'; // 3.x
    $customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' );
    $customize_url_arr[] = $customize_url; // 4.0 & 4.1
    if ( current_theme_supports( 'custom-header' ) && current_user_can( 'customize') ) {
        $customize_url_arr[] = add_query_arg( 'autofocus[control]', 'header_image', $customize_url ); // 4.1
        $customize_url_arr[] = 'custom-header'; // 4.0
    }
    if ( current_theme_supports( 'custom-background' ) && current_user_can( 'customize') ) {
        $customize_url_arr[] = add_query_arg( 'autofocus[control]', 'background_image', $customize_url ); // 4.1
        $customize_url_arr[] = 'custom-background'; // 4.0
    }
    foreach ( $customize_url_arr as $customize_url ) {
        remove_submenu_page( 'themes.php', $customize_url );
    }
}
add_action( 'admin_menu', 'remove_customize', 999 );

답변은 다음과 같습니다.

add_action( 'admin_menu', function () {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
    foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
        foreach ($menu_item as $value) {
            if (strpos($value,'customize') !== false) {
                unset( $submenu[ 'themes.php' ][ $index ] );
            }
        }
    }
}
});

rjb가 수용된 답변에서 in_array()의 니들로 배열을 사용한 방법은 작동하지 않습니다.그 이유를 문서에서 확인하세요.in_array를 $menu_item 어레이를 루프하여 값의 일부로 "customize"를 찾는 다른 포어치로 교체했습니다.

WordPress 4.9.6에서 사용할 수 있습니다.

직접 변경할 수 있습니다.$submenus글로벌화:

global $submenu;
unset($submenu['themes.php'][6]); // Customize link

이걸 같은 기능으로 쓰고 있어요admin_menu다른 관리 아이템의 설정을 해제하고 정상적으로 동작하고 있는 것 같습니다.

function as_remove_menus () {
       remove_menu_page('upload.php'); //hide Media
       remove_menu_page('link-manager.php'); //hide links
       remove_submenu_page( 'edit.php', 'edit-tags.php' ); //hide tags
       global $submenu;
        // Appearance Menu
        unset($submenu['themes.php'][6]); // Customize
}
add_action('admin_menu', 'as_remove_menus');

편집: WordPress 4.9+용으로 업데이트되었으며 PHP <= 5.4>와의 호환성 향상

WordPress core는 테마 커스터마이저를 기본적으로 비활성화하는 후크를 제공하지 않지만, 글로벌을 변경하여 [Affectance]메뉴에서 [Customize]링크를 삭제할 수 있는 현명하고 우아한 방법이 있습니다.$submenu변수:

/**
 * Remove Admin Menu Link to Theme Customizer
 */
add_action( 'admin_menu', function () {
    global $submenu;

    if ( isset( $submenu[ 'themes.php' ] ) ) {
        foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
            if ( in_array( array( 'Customize', 'Customizer', 'customize' ), $menu_item ) ) {
                unset( $submenu[ 'themes.php' ][ $index ] );
            }
        }
    }
});

다른 코드 샘플은 글로벌 $submenu 변수의 특정 수치 인덱스에 무책임하게 의존합니다(예:$submenu['themes.php'][6][0], ...)이 메서드는 계층을 인텔리전트하게 통과하므로 이전(3.x) 및 최신 버전의 WordPress(4.x)와 동일하게 호환됩니다.

실제로 사용할 수 있습니다.remove_submenu_page관리 화면에서 테마 서브메뉴 옵션을 삭제합니다.이 함수가 기능하려면 admin에서 정확히 링크되어 있는 것과 URL이 일치해야 합니다.

function remove_admin_menus() {

    remove_submenu_page( 
        'themes.php', 
        'customize.php?return=' . 
            urlencode( str_replace( get_bloginfo('url'), "", get_admin_url() ) ) . 
            'themes.php' );

}

add_action( 'admin_init', 'remove_admin_menus' );

단순히 '/wp-admin'을 사용하지 않는 경우에 대비하여 admin URL을 프로그래밍 방식으로 확인했습니다.@isabisa 메뉴 항목의 인덱스가 변경되었을 경우에도 향후 파손을 피할 수 있습니다.

WP 4.0에서 사용하고 있는데 잘 작동해요!

메뉴 삭제는 커스터마이저를 완전히 사용하지 않도록 설정하지 않기 때문에 중간 정도의 해결책에 불과합니다.커스터마이저를 완전하고 안전하게 비활성화(및 메뉴 삭제)하려면 모든 사용자로부터 커스터마이저 권한을 삭제해야 합니다.다음과 같은 방법으로 할 수 있습니다.

add_filter('map_meta_cap', function($caps, $cap, $user_id, $args) {
    if ('customize' == $cap) return ['do_not_allow'];
    return $caps;
}, 10, 4);

WordPress > = 4.9.8

add_action('admin_menu', function () {
  $request = urlencode($_SERVER['REQUEST_URI']);
  remove_submenu_page('themes.php', 'customize.php?return='. $request);
}, 999);

@rjb가 받아들인 답변은 제 스페인어 워드프레스에 효과가 있는 것이 아니라, 단지 제 스페인어 워드프레스를 바꾸는 것 뿐이었습니다.Customize로로 합니다.customize성공했어.

/**
 * Remove Admin Menu Link to Theme Customizer
 */
add_action( 'admin_menu', function () {
    global $submenu;

    if ( isset( $submenu[ 'themes.php' ] ) ) {
        foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
            if ( in_array( 'customize', $menu_item ) ) {
                unset( $submenu[ 'themes.php' ][ $index ] );
            }
        }
    }
});

wordpres 5.*에서 동작합니다.

Wordpress Admin에서 Customize 삭제 사이드바 및 프론트 엔드 상단 바에서 삭제해야 합니다.

사이드바 메뉴에서

add_action( 'admin_menu', 'remove_customize' );

function remove_customize() {
    global $submenu;
    if ( isset( $submenu[ 'themes.php' ] ) ) {
        foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
            if(in_array('Customize', $menu_item) || in_array('Customizer', $menu_item) || in_array('customize', $menu_item))
            {
                unset( $submenu[ 'themes.php' ][ $index ] );
            }
        }
    }
}

맨 위의 관리 바에서(프런트 엔드로)

add_action( 'admin_bar_menu', 'remove_customize_menu_bar', 999 );

function remove_customize_menu_bar( $wp_admin_bar ) {
    $wp_admin_bar->remove_node( 'customize' );
}

그러면 커스터마이즈 옵션이 완전히 비활성화됩니다.

WordPress 5의 경우

add_action( 'admin_menu', function() {
    remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode($_SERVER['SCRIPT_NAME']));
}, 999 )

'admin_menu'에서 'admin_init'을 변경해 보십시오.

@bash88 answer와 @Emanuel A. answer는 기능하지만 테마에서 버튼(파란색 맞춤 버튼)을 삭제하려면 다음과 같이 답변해야 합니다.

테스트 완료 Word Press 5.0.3

/**
 * Remove customize links from admin panel.
 */
function admin_remove_customize_links() {
    echo '<style>.hide-if-no-customize { display: none !important; }</style>';
}
add_action( 'admin_head', 'admin_remove_customize_links' );

승인된 응답 업데이트(Wordpress 5)

add_action( 'admin_menu', 'rompiot_remove_customize' );

/**
 * Remove Admin Menu Link to Theme Customizer
 */
public function rompiot_remove_customize()
{
    global $submenu;

    if (isset($submenu['themes.php'])) {
        
        foreach ($submenu['themes.php'] as $index => $array_menu_item) {

            foreach ($array_menu_item as $key => $menu_item) {
                if (in_array($menu_item, ['Customize', 'Customizer', 'customize'])) {
                    unset($submenu['themes.php'][$index]);
                }
            }                

        }
    }
}

WORDPRESS 5.7+의 기능 코드, 2021년 8월

작업 중인 대규모 WP 사이트에 맞게 WP 관리 바를 커스터마이즈할 필요가 있었습니다(크기 조정 시 텍스트가 관리 바에서 실행되고 있었습니다).나는 이 질문에 대한 이전의 모든 답변에서 말 그대로 모든 코드 조각을 시도했지만, 불행히도 나에게는 효과가 없었다.Google에서 찾은 이 코드가 다른 사람과 공유하기 위해 사용되었습니다(사용자의 기능에 적용됩니다.php:

/**
 * This function removes items from the WP admin bar. If it gets too cluttered,
 * things will run off the screen and look bad.
 * @param object $wp_admin_bar representing the WP admin bar.
 */
function remove_from_admin_bar($wp_admin_bar) {
    // WordPress Core Items (uncomment to remove)
    $wp_admin_bar->remove_node('updates');
    $wp_admin_bar->remove_node('comments');
    //wp_admin_bar->remove_node('new-content');
    $wp_admin_bar->remove_node('wp-logo');
    //$wp_admin_bar->remove_node('site-name');
    //$wp_admin_bar->remove_node('my-account');
    //$wp_admin_bar->remove_node('search');
    $wp_admin_bar->remove_node('customize');
}

add_action('admin_bar_menu', 'remove_from_admin_bar', 999);

댓글, 업데이트, WP 아이콘을 삭제하는 것이 좋은 시작이라고 생각합니다.여기서도 커스텀 플러그인을 무효로 할 수 있습니다.999년 수 .is_admin()프론트 엔드의 다른 링크를 숨기거나 표시하는 경우와 WP 관리자와의 사이에 기능합니다.

언급URL : https://stackoverflow.com/questions/25788511/remove-submenu-page-customize-php-in-wordpress-4-0

반응형