관리자 메뉴에 임의 링크를 추가 하시겠습니까?


20

WordPress 관리 메뉴에 임의의 하이퍼 링크를 추가하는 방법이 있습니까 (관리자 대시 보드에 로그인 할 때 왼쪽 메뉴를 의미 함)? 예를 들어 Google에 링크를 추가 할 수 있습니까?

필자의 경우에는 작업중 인 Wordpress 테마에 대한 스타일 가이드 페이지를 추가하여 다른 HTML 요소에 테마를 사용하여 스타일을 지정하는 방법을 보여주고 다양한 스타일을 멋지게 표현하는 방법을 시연 할 수 있습니다.

이것은 지금까지 내가 작성한 코드입니다 ( 주 : 불완전합니다 ) : functions.php 에서 Appearance 섹션 에 새로운 메뉴 항목을 추가했습니다 .

add_action('admin_menu', 'create_theme_style_page');

function create_theme_style_page() {
  add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}

에서 build_styleguide_page()로 리디렉션을 시도하는 header()오류를 제공합니다 ( 헤더 정보를 수정할 수 없습니다 ).

답변:


13

안녕하세요 @ 톰 ,

귀하의 질문을 올바르게 이해하면 메뉴에 링크를 추가하는 방법을 알 필요가 없습니다 (이미 알고 있음) 대신 링크를 올바르게 리디렉션하는 방법을 알아야합니다.

관리 메뉴 항목에서 외부 URL로 리디렉션

그렇다면 메뉴 항목 기능을 사용 하지 말고 HTTP 헤더를 제외하고는 아무 것도 출력하지 않을 정도로 WordPress를 빨리 "후킹" 해야합니다. 전화를 걸었을 때 가장 빠른 후크 /wp-admin/themes.php가있는 after_setup_theme것으로 보이며 제대로 작동하는 것 같습니다.

후크에서 테스트 할 수 있도록 "메뉴 슬러그"를 사용하십시오.

그러나 그것이 작동하려면 먼저 후크 / 함수 add_theme_page에서 호출을 수정 admin_menu해야 create_theme_style_page()합니다. 다섯 번째 매개 변수 (admin 옵션을 구현하기 위해 호출하는 함수)는 필요하지 않으므로 삭제하고 네 번째 매개 변수 ( "menu slug" )를로 변경했습니다 themes.php?goto=build-styleguide-page.

우리는 문자 그대로 네 번째 매개 변수에 대해 거의 모든 것을 선택할 수 있었지만 themes.php일관성을 위해 다른 모양 옵션과 동일한 페이지 ( )로 라우팅되도록 리디렉션 할 것 입니다. gotoWordPress에서는 이름을 사용하지 않기 때문에 임의로 이름을 찾았 습니다 .

add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
  add_theme_page(
    'Theme Styleguide',
    'Theme Styleguide',
    'administrator',
    'themes.php?goto=build-styleguide-page'
  );
}

BTW, 우리는 build_styleguide_page()이 솔루션에 필요하지 않기 때문에 귀하의 기능을 제거 했습니다.

가장 빠른 후크에서 리디렉션 themes.php:after_setup_theme

마지막 코드로 함수에 after_setup_theme후크를 구현 redirect_from_admin_menu()합니다. 현재 페이지가 themes.php있는지 확인하고 URL에 URL 매개 변수 goto가 전달 되었는지 확인합니다 . 그런 다음 / 문을 goto사용하여 값이 있는지 확인합니다 . 그렇다면 귀하의 명시된 가상의 예를 들어 Google로 리디렉션됩니다. 그렇지 않으면 Google은 관리자 대시 보드로 다시 리디렉션합니다.switchcase'build-styleguide-page'

add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
  global $pagenow;
  if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
    switch ($_GET['goto']) {
      case 'build-styleguide-page':
        wp_redirect("http://www.google.com");
        break;
      default:
        wp_safe_redirect('/wp-admin/');
        break;
    }
    exit;
  }
}

노트:

  1. 필요한 경우 추가 리디렉션을 더 쉽게 추가 할 수 있도록 hook / 함수 에 switch/ case문 을 사용하기로 선택했습니다 . 더 많은 사례 진술을 추가하십시오.after_setup_themeredirect_from_admin_menu()goto

  2. wp_redirect()wp_safe_redirect()기능이 실제로 종료하지 않는다; WordPress를 중지하고 리디렉션을 재정의하지 않으려면 exit 문을 명시 적으로 발행해야합니다.

이것이 도움이되기를 바랍니다!


22

$submenu배열 에 항목을 직접 추가하여 메뉴에 항목을 추가 하면 리디렉션을 수행 할 필요가 없으며 전체 오프 사이트 URL을 메뉴 링크로 사용할 수 있습니다 (내가 직접 수행).

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

index.php는 상위 메뉴의 키 / 링크를 나타내므로이 예에서는 기본적으로 대시 보드 메뉴에 항목을 추가 합니다.

물론, add_{type}_page기능 을 사용하는 것만 큼 예쁘지는 않지만 WordPress가 관리자 메뉴 링크에서 오프 사이트 URL을 방지한다는 사실을 해결합니다.

다양한 가상 호스트를 메뉴에 추가하기 위해 비슷한 것을 사용하므로 관리자 메뉴에서 직접 다른 설치로 전환 할 수 있습니다 (모두 스크립트로 완료되었지만 기본적으로 위 코드의 영광스러운 버전을 사용합니다).

노트: 코드를 사용하기로 결정한 경우 사용중인 키 (예제 코드의 500 배열 키)를 할당하지 않도록주의하십시오.

힌트 : 실제로 메뉴 키에서 음수 값을 사용하여 메뉴 항목을 기본 WordPress 항목 앞에 놓을 수 있습니다.


참고 : 음수 키를 문자열로 설정해야한다고 생각합니다. '-5'그리고 그렇지 -5않으면, 열쇠는 유효하지 않은 것으로 간주됩니다. (생각하지 않으면 음수 문자열이 작동합니다.)
t31os

고마워, 당신은 실제 기능으로는 그것을 할 수 없다고 생각하지만, 이것은 링크를 갖기 위해 후크 / 리디렉션 콤보를 추가하는 것보다 훨씬 낫습니다.
El Yobo

2
이 특정 답변은 플러그인 포스트 상태 메뉴 항목에 도움이되었습니다 (아마도 그 기능을 추측 할 수 있습니다). 어쨌든, 다른 플러그인이 어떤 메뉴에 물건을 추가하는지 알지 못했기 때문에 다른 플러그인 array_push()과의 충돌을 피하기 위해 메뉴 항목을 추가하는 데 사용한다고 덧붙였습니다 .
mrwweb

작은 스 니펫 사용에 대한 보너스 및 보너스 포인트처럼 작동합니다.
João

2
+1. 키를 고르기보다는 마지막 키를 잡고 증가시키기 만하면됩니다. 예를 들어, 도구 메뉴에 하위 메뉴 항목을 추가 할 때 : global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] = etc.
webaware

3

나는 이것으로 동일하게 달성했다.

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

여기서 수행하는 작업은 메뉴 항목을 추가하고 슬러그를 정의한 다음 'admin_init'에서 슬러그가 있는지 확인하고 원하는 위치로 리디렉션합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.