it-swarm-ko.tech

관리자 메뉴에 임의의 링크 추가?

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

필자의 경우, Wordpress 테마에 대한 스타일 가이드 페이지를 추가하여 다양한 HTML 요소의 테마 스타일을 사용자에게 보여주고 다양한 스타일을 멋지게 스타일 화하는 방법을 보여줄 수 있습니다.

이것은 내가 지금까지 가지고있는 코드입니다 ( 참고 : 불완전합니다 ) : functions.php Appearance section에 새 메뉴 항목을 추가했습니다 :

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()으로 리디렉션하려고하면 오류가 발생합니다 ( 헤더 정보를 수정할 수 없음 ).

20
Tom

안녕 @ 톰,

귀하의 질문을 올바르게 이해하면 메뉴에 링크를 추가하는 방법을 알 필요가 없습니다 (이미 알고있는 것으로 보입니다). 대신 올바르게 리디렉션되도록 링크를 얻는 방법을 알아야합니까?

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

그렇다면 당신이해야 할 일은 메뉴 항목 기능을 사용하지 않고 HTTP 헤더를 제외하고 아무것도 출력하지 않도록 초기에 "hook" WordPress를 일찍 시작하는 것입니다. /wp-admin/themes.php를 호출 할 때 가장 초기에 발생하는 훅은 after_setup_theme 인 것으로 보이며 제대로 작동하는 것 같습니다.

"Menu Slug"를 사용하여 훅에서 테스트 할 수 있습니다.

하지만 작동 시키려면 add_theme_page hook/create_theme_style_page() 함수에서 admin_menu에 대한 호출을 수정해야합니다. 다섯 번째 매개 변수 (admin 옵션을 구현하기 위해 호출 할 함수)가 필요 없기 때문에 우리는 네 번째 매개 변수 ("menu slug")를 themes.php?goto=build-styleguide-page로 변경했습니다.

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

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

마지막 코드로서 우리의 redirect_from_admin_menu() 함수에서 after_setup_theme 훅을 구현합니다. 현재 페이지가 themes.php인지 확인하고 goto이라는 URL 매개 변수가 URL에 전달되었는지 확인합니다. 그런 다음 goto/switch 문을 사용하여 case의 값이 '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. after_setup_theme hook/redirect_from_admin_menu() 함수에서 switch/case 문을 사용하여 필요에 따라 goto 리디렉션을 추가하는 것이 더 쉽습니다. case 문을 더 추가하면됩니다.

  2. wp_redirect()wp_safe_redirect() 함수는 실제로 종료되지 않습니다. 당신은 명시 적으로 종료 문을 발행하여 WordPress를 중지시키고 리디렉션을 무시하지 않아야합니다.

희망이 도움이!

13
MikeSchinkel

항목을 $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 항목보다 먼저 적용 할 수 있습니다.

21
t31os

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

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'에 슬러그가 있는지 확인하고 원하는 위치로 리디렉션하는 것입니다.

3
Bobz