Adăugarea unui Link Arbitrar în Meniul de Administrare?
Există vreo metodă de a adăuga un hyperlink arbitrar în meniul de administrare WordPress (mă refer la meniul din stânga când te autentifici în panoul de administrare)? De exemplu, se poate adăuga un link către Google?
În cazul meu, aș dori să adaug o pagină de stil pentru o temă WordPress la care lucrez, pentru a-i arăta utilizatorului cum sunt stilizate diferite elemente HTML cu tema și pentru a demonstra cum să stilezi diverse lucruri frumos.
Acesta este codul pe care îl am până acum (notă: este incomplet): În functions.php am adăugat un nou element de meniu în secțiunea Apariție:
add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
add_theme_page('Ghidul de Stil al Temei', 'Ghidul de Stil al Temei', 'administrator', basename(__FILE__),'build_styleguide_page');
}
function build_styleguide_page() {
echo "Nu sunt sigur ce trebuie pus aici pentru a redirecționa administratorul către un URL arbitrar?";
}
În build_styleguide_page()
, încercarea de a redirecționa cu header()
dă o eroare (Cannot modify header information).

Dacă adaugi elementul tău în meniu prin inserarea directă în array-ul $submenu
, vei evita necesitatea de a face o redirecționare și vei putea folosi un URL extern complet ca link de meniu (eu personal folosesc această metodă).
add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
global $submenu;
$submenu['index.php'][500] = array( 'Numele elementului de meniu', 'manage_options' , 'http://example.com' );
}
index.php
reprezintă cheia/link-ul meniului părinte, deci în exemplu adaug de fapt un element în meniul Panou de control.
Desigur, nu este la fel de elegant ca folosirea funcțiilor add_{type}_page
, dar rezolvă problema faptului că WordPress blochează URL-uri externe în link-urile din meniul de administrare.
Eu folosesc ceva similar pentru a adăuga diverse host-uri virtuale în meniu, astfel încât să pot comuta între alte instalații direct din meniul de administrare (totul e realizat printr-un script, dar practic folosește o variantă mai avansată a codului de mai sus).
NOTĂ: Dacă decizi să folosești acest cod, fii atent să nu atribui o cheie care este deja folosită (cheia 500 din exemplu).
SFAT: Poți folosi de fapt și valori negative pentru cheile de meniu, astfel încât să poți forța elementele tale să apară înaintea oricăror elemente native WordPress.

NOTĂ: Cred că va trebui să setezi acea cheie negativă ca șir de caractere, adică '-5'
și nu -5
, altfel cheia este considerată invalidă (cred).. (șirurile negative funcționează totuși, dacă nu mă înșel)..

Mulțumesc, e păcat că nu poți face asta cu funcțiile reale, dar e mult mai bine decât să fii nevoit să adaugi o combinație de hook/redirect doar pentru a avea un link.

Acest răspuns anume m-a ajutat cu plugin-ul meu Post Status Menu Items (probabil vă puteți da seama ce face). Oricum, pentru că nu știam ce alte plugin-uri ar putea adăuga elemente în ce meniuri, am vrut să adaug că am folosit array_push()
pentru a adăuga elementele de meniu și pentru a evita conflictele cu alte plugin-uri.

Funcționează perfect, plus un punct bonus pentru folosirea unui fragment de cod atât de mic.

+1. În loc să alegi o cheie la întâmplare, mai bine iei ultima cheie și o incrementezi. De exemplu, când adaugi un element de submeniu în meniul Instrumente: global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =
etc.

Mulțumesc mult :) Am încercat să folosesc atât Jquery cât și redirecționare și am avut probleme. Acest lucru este perfect.

Am totuși o întrebare, cum aș putea adăuga un alt link? Am încercat să folosesc un array multidimensional, dar nu este permis.

Am evitat intenționat abordarea cu incrementare pentru că nu pot spune mereu că vreau să adaug sau să prefixez indexul, nici întrebarea nu avea această cerință, dar ar fi o alegere inteligentă dacă ai vrut să adaugi în meniu programatic.

Pentru a deschide linkul într-un tab nou / pagină nouă (target="_blank"), citește asta: https://stackoverflow.com/questions/23036664/how-to-open-target-blank-in-a-custom-admin-sub-menu-page

Salut @Tom,
Dacă am înțeles corect întrebarea ta, nu ai nevoie atât de mult să știi cum să adaugi un link în meniu (se pare că deja știi asta), ci mai degrabă ai nevoie să înveți cum să faci ca link-ul tău să redirecționeze corect, corect?
Redirecționarea către o URL externă dintr-un element de meniu din Admin
Dacă da, ceea ce trebuie să faci este să nu folosești funcția de element de meniu, ci să "conectezi" (hook) WordPress suficient de devreme, astfel încât să nu fi generat încă nimic, cu excepția eventualelor antete HTTP. Cel mai devreme hook când se apelează /wp-admin/themes.php
pare a fi after_setup_theme
și pare să funcționeze bine.
Folosește un "Menu Slug" pentru a-l putea testa într-un Hook
Dar pentru a funcționa, trebuie mai întâi să modificăm apelul tău la add_theme_page
în hook-ul admin_menu
/ funcția ta create_theme_style_page()
. Am renunțat la al cincilea parametru (funcția de apelat pentru a implementa opțiunea de admin) pentru că nu avem nevoie de el și am schimbat al patrulea parametru ("menu slug") în themes.php?goto=build-styleguide-page
.
Deși am fi putut alege aproape orice pentru al patrulea parametru, având în vedere că vom redirecționa, am rutat către aceeași pagină (themes.php
) ca și alte opțiuni de aspect pentru consistență. De asemenea, am ales arbitrar numele goto
pentru că WordPress nu îl folosește și pare să aibă sens pentru această situație.
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'
);
}
Apropo, am eliminat funcția ta build_styleguide_page()
pentru că nu avem nevoie de ea în această soluție.
Redirecționează în cel mai devreme Hook pentru themes.php
: after_setup_theme
Ca ultim fragment de cod, implementăm hook-ul nostru after_setup_theme
în funcția redirect_from_admin_menu()
. Testăm dacă pagina curentă este themes.php
și dacă a fost transmis un parametru URL goto
. Apoi testăm valoarea lui goto
folosind o instrucțiune switch
/case
pentru a verifica dacă are valoarea 'build-styleguide-page'
; dacă da, redirecționează către URL-ul dorit, de exemplu Google, altfel redirecționăm înapoi către panoul de administrare:
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;
}
}
Note:
Am ales să folosesc instrucțiunea
switch
/case
în hook-ulafter_setup_theme
/ funcțiaredirect_from_admin_menu()
pentru a fi mai ușor de adăugat redirecționări suplimentaregoto
dacă este nevoie; doar adaugă mai multe cazuri.Funcțiile
wp_redirect()
șiwp_safe_redirect()
nu se termină efectiv; trebuie să emiți explicit o instrucțiune exit pentru a opri WordPress și a nu anula redirecționarea ta.
Sper că te ajută!

Am realizat același lucru cu aceasta:
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 );
Ceea ce faci aici este să adaugi un element de meniu și să definești un slug, apoi la 'admin_init' verifici dacă slug-ul există și redirecționezi către locația dorită.
