it-swarm-eu.dev

Přidání libovolného odkazu na nabídku Admin?

Existuje způsob, jak přidat libovolný hypertextový odkaz na WordPress admin menu (mám na mysli nabídku vlevo, když se přihlásíte do řídicího panelu admin)? Můžete například přidat odkaz na Google?

V mém konkrétním případě bych chtěl přidat stránku stylu pro téma Wordpress, na kterém pracuji, takže můžu uživateli ukázat, jak jsou jednotlivé prvky HTML stylizovány s motivem a ukázat, jak pěkně stylovat různé věci.

Toto je kód, který mám zatím ( poznámka: je nekompletní ): In functions.php Přidal jsem novou položku menu do sekce 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?";
}

V build_styleguide_page(), pokus o přesměrování s header() dává chybu ( Nelze změnit informace o záhlaví ).

20
Tom

Hi @Tom,

Pokud rozumím vaší otázce správně, nemusíte tolik vědět, jak přidat odkaz do menu (zdá se, že to už víte), ale místo toho se musíte naučit, jak správně dostat odkaz na přesměrování, ne?

Přesměrování na externí URL z položky Admin Menu

Pokud ano, co musíte udělat, je nepoužívat funkci menu, ale místo toho "hook"WordPress dostatečně brzy, že nemá výstup nic kromě možná HTTP hlavičky. Nejdříve háček při volání /wp-admin/themes.php se zdá být after_setup_theme a zdá se, že funguje dobře.

Použijte znak "Menu Slug"Takže můžete test na to v háku

Abychom to však dostali do práce, musíme nejprve změnit vaše volání na add_theme_page v admin_menu hook/your create_theme_style_page() funkci. Vynechali jsme pátý parametr (funkce pro zavolání možnosti admin), protože ho nepotřebujeme a změnili jsme čtvrtý parametr ("menu slug") na themes.php?goto=build-styleguide-page.

Ačkoliv jsme pro čtvrtý parametr mohli vybrat téměř doslova cokoliv, vzhledem k tomu, že budeme přesměrovávat směrování na stejnou stránku (themes.php) jako jiné možnosti vzhledu konzistence. Také jsem jen náhodně přišel s názvem goto, protože WordPress nepoužívá, a zdá se, že smysl pro to.

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, zbavili jsme se vaší build_styleguide_page() funkce, protože ji pro toto řešení nepotřebujeme.

Přesměrování v nejstarším háku pro themes.php: after_setup_theme

Jako náš poslední kousek kódu implementujeme náš after_setup_theme hák v naší redirect_from_admin_menu() funkci. Testujeme, zda je aktuální stránka themes.php a zda adresa URL goto byla předána URL. Pak testuje hodnotu goto pomocí příkazu switch/case, aby zjistil, zda má hodnotu 'build-styleguide-page'; pokud ano, přesměruje se na vaši hypotetickou hypotézu, např. Google jinak přesměrujeme zpět na řídicí panel admin:

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;
  }
}

Poznámky:

  1. Rozhodl jsem se použít switch/case příkaz v after_setup_theme hook/redirect_from_admin_menu() funkci, aby bylo jednodušší přidat další goto přesměrování, pokud to potřebujete; stačí přidat další případové výkazy.

  2. funkce wp_redirect() a wp_safe_redirect() nekončí; musíte explicitní vydat prohlášení o ukončení dostat WordPress zastavit a není přepsat vaše přesměrování.

Snad to pomůže!

13
MikeSchinkel

Pokud přidáte položku do nabídky přidáním do pole $submenu přímo, vyhnete se nutnosti přesměrování a budete moci použít kompletní URL offsite jako odkaz na menu (to já sám).

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 představuje klíč/odkaz nadřazeného menu, takže v příkladu v podstatě přidávám položku do Dashboard menu.

Jistě, není to tak docela, jako pomocí add_{type}_page funkcí, ale to funguje-kolem skutečnosti, WordPress zabraňuje off-site URL v odkazech menu admin.

Použil jsem něco podobného, ​​abych do menu přidal různé virtuální hostitele, takže můžu přepnout do jiných instalací přímo z administračního menu (vše se provádí pomocí skriptu, ale v podstatě používá oslavenou verzi výše uvedeného kódu).

POZNÁMKA: Pokud se rozhodnete použít kód, buďte opatrní, abyste přiřadili klíč, který se používá (klíč 500 v příkladu kódu).

TIP: Můžete skutečně použít záporné hodnoty v klávesách menu, takže si můžete vynutit, aby položky nabídky sedět před některou z nativních položek WordPress.

21
t31os

Toho jsem dosáhl:

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 );

Zde můžete přidat položku menu a definovat slug, pak na 'admin_init' zkontrolovat, zda existuje slug a přesměrovat na požadované místo.

3
Bobz