En el menú Páginas en la página de administración de WordPress, obtuve este diseño:
Paginas
- Editar (url: edit-pages.php)
- Agregar nuevo (url: página-nueva.php)
- Páginas especiales (url: edit-pages.php?special-pages=true)
como puede ver, he agregado un nuevo elemento de submenú llamado Páginas especiales que es más o menos un enlace a la página Editar con filtro personalizado. Debido a que WordPress usa el nombre del archivo para identificar y resaltar el elemento del submenú, cada vez que hago clic en Páginas especiales, se selecciona el elemento del submenú Editar. ¿Hay alguna forma de obligar a WordPress a seleccionar el elemento de menú Páginas especiales en su lugar?
Salud
mejor solución:
add_filter('parent_file', 'my_plugin_select_submenu');
function my_plugin_select_submenu($file) {
global $plugin_page;
if ('__my-current-submenu-slug__' == $plugin_page) {
$plugin_page="__my-submenu-slug-to-select__";
}
return $file;
}
-
En mi caso, estaba enlazando a la página de administración de taxonomía del administrador, la taxonomía no estaba adjunta a ningún tipo de publicación. tu código funcionó perfectamente. gracias.
– wesamly
13 de enero de 2016 a las 14:45
Para aclarar aún más la respuesta de Ken Vu, edite las variables globales $submenu_file
y $parent_file
. Por ejemplo, para resaltar su página:
global $submenu_file;
$submenu_file = "edit-pages.php?special-pages=true";
Si necesita cambiar el elemento de nivel superior resaltado, utilice $parent_file
. Por ejemplo, resalte la página de configuración “Escritura”:
global $parent_file;
global $submenu_file;
$parent_file="options-general.php";
$submenu_file="options-writing.php";
-
¿Me puede decir dónde colocar estos códigos idealmente? No pude hacerlos funcionar.
– Musa Haidari
5 de mayo de 2014 a las 7:20
-
Traté de implementar esto dentro de la función callaback del
add_meta_boxes()
, pero no resalta mi menú de administración de nivel superior. Puedo agregar que no tengo ningún submenú, solo un menú de administración de nivel superior.– Alexandre Bourlier
18 de agosto de 2014 a las 14:20
-
Conseguí que funcionara correctamente. Escribiré otra respuesta para que otras personas puedan encontrarla más fácilmente.
– Alexandre Bourlier
18 de agosto de 2014 a las 14:39
Solución: utilice la variable $submenu_file
$submenu_file = “editar-pages.php?special-pages=true”
-
¿Puedes publicar por favor un ejemplo de cómo usarlo? no puedo hacerlo funcionar
– bluantinoo
6 oct 2011 a las 16:41
Gracias Ken Vu y Jonathan Brinley. Usando sus respuestas, finalmente conseguí que el resaltado de mi menú de administración funcionara correctamente. Como luché un poco para que funcionara, pensé en publicar el resultado completo aquí, para que otras personas puedan encontrarlo más fácilmente:
La idea es llamar al parent_file
filtro (indocumentado, como muchas partes de WordPress desafortunadamente). En mi caso, estaba agregando un menú personalizado en lugar del predeterminado generado al crear un tipo de publicación personalizada.
En mi código postal personalizado, llamo al add_meta_boxes
acción. Dentro de este gancho, emito mi llamado a la parent_file
filtro:
add_filter('parent_file', array(&$this, 'highlight_admin_menu'));
_
Entonces así es como mi hightlight_admin_menu
la función se parece a:
function highlight_admin_menu($some_slug){
global $parent_file;
$parent_file="post.php?post=149&action=edit";
return $parent_file;
}
_
Esto hizo que mi menú se resaltara correctamente. Intente jugar con su propio código para saber dónde emitir el add_filter('parent_file', ...)
código. Encuentre un poco de código ejecutado solo en esa carga de página en particular, pero lo suficientemente pronto como para que aún sea posible modificar el $parent_file
variable.
¡Espero que esto ayude!
Para cambiar el elemento de menú resaltado por un elemento de submenú, el filtro adecuado es submenu_file
.
add_filter('submenu_file', 'menuBold');
static function menuBold($submenu_file)
{
if ( checkProperPage($_GET) ) {
// The address of the link to be highlighted
return 'post-new?post_type=foobar&foo=bar';
}
// Don't change anything
return $submenu_file;
}
El cheque ocurre en WP’s ~/wp-admin/menu-header.php
archivo en la línea 194 (WordPress 4.5.3):
if ( isset( $submenu_file ) ) {
if ( $submenu_file == $sub_item[2] )
$class[] = 'current';
...
}
Sajidur Rahman
Puede modificar este código para que funcione para usted. Puede cambiar tanto el menú principal como el submenú con eso. Código probado.
function change_active_parent($submenu_file)
{
global $parent_file;
$zone="edit-tags.php?taxonomy=zone&post_type=product";
$storefront="edit-tags.php?taxonomy=storefront&post_type=product";
$container="edit-tags.php?taxonomy=container&post_type=product";
if (esc_html($zone) == $submenu_file) {
$parent_file="parent";
$submenu_file = $zone;
}
elseif (esc_html($storefront) == $submenu_file) {
$parent_file="parent";
$submenu_file = $storefront;
}
elseif (esc_html($container) == $submenu_file) {
$parent_file="parent";
$submenu_file = $container;
}
return $submenu_file;
}
add_filter( 'submenu_file', 'change_active_parent' );
muerte 1305
Utilizar el load-{$page_hook}
gancho de acción y modificar los globales necesarios:
/**
* For giggles, lets make an admin page that is not "in the menu" to play with.
*/
add_action('admin_menu', 'mort1305_admin_menu');
function mort1305_admin_menu() {
add_submenu_page(
NULL,
'Page Title',
'',
'administrator',
'my_slug',
'mort1305_page_content'
);
}
/**
* The menu item to highlight and the submenu item to embolden.
*/
add_action('load-admin_page_my_slug', 'mort1305_on_page_load');
function mort1305_on_page_load(){
global $plugin_file, $submenu_file, $title;
$plugin_page="slug-of-menu-item-to-be-highlighted";
$submenu_file="slug-of-submenu-item-to-be-bold";
foreach($submenu[NULL] as $submenu_arr) {
if($submenu_arr[2] === 'test_page_slug') {
$title = $submenu_arr[3];
break;
}
}
}
/**
* Page content to display.
*/
function mort_1305_page_content() {
echo This is the '. get_admin_page_title() .' page. The slug of my parent is '. get_admin_page_parent() .'.';
}