WordPress muestra la taxonomía en el menú de administración personalizado

3 minutos de lectura

Estoy tratando de mostrar una taxonomía personalizada en un elemento del menú de administración que es solo una página, es decir http://ejemplo.com/wp-admin/admin.php?page=bla.

Según el desarrollador de WordPress. página para show_in_menu por debajo registro_taxonomía dice lo siguiente:

‘alguna cadena’: si hay una página de nivel superior existente como ‘tools.php’ o ‘edit.php?post_type=page’, el tipo de publicación se colocará como un submenú de eso.

¿Significa esto que las taxonomías no se pueden mostrar bajo nada más que esos?

PHP

<?php
// hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_book_taxonomies', 0 );

// create two taxonomies, genres and writers for the post type "book"
function create_book_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name'              => _x( 'Genres', 'taxonomy general name' ),
        'singular_name'     => _x( 'Genre', 'taxonomy singular name' ),
        'search_items'      => __( 'Search Genres' ),
        'all_items'         => __( 'All Genres' ),
        'parent_item'       => __( 'Parent Genre' ),
        'parent_item_colon' => __( 'Parent Genre:' ),
        'edit_item'         => __( 'Edit Genre' ),
        'update_item'       => __( 'Update Genre' ),
        'add_new_item'      => __( 'Add New Genre' ),
        'new_item_name'     => __( 'New Genre Name' ),
        'menu_name'         => __( 'Genre' ),
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_in_menu'      => 'bla', // not working | tried admin.php?page=bla as well, also not working
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'genre' ),
    );

    register_taxonomy( 'genre', array( 'book' ), $args );
}

He encontrado una forma de solucionar este problema, código a continuación:

    add_action( 'admin_menu', 'shmeh_menu' );
    add_action( 'parent_file', 'menu_highlight' );

    function shmeh_menu() {
        add_submenu_page( 'bla', 'Shmeh', 'Shmeh', 'manage_options', 'edit-tags.php?taxonomy=shmeh');
    }

    function menu_highlight( $parent_file ) {
        global $current_screen;

        $taxonomy = $current_screen->taxonomy;
        if ( $taxonomy == 'shmeh' ) {
            $parent_file="bla";
        }

        return $parent_file;
    }

  • Gracias, después de buscar en Internet a toda máquina.

    –Richard Muvirimi

    14 de abril de 2020 a las 14:03

  • funciona solo parcialmente: me abre el submenú correcto, pero la página del submenú no está resaltada en blanco y en negrita

    – Antonio Gallo

    1 mayo 2020 a las 19:49

  • @AntonioGallo pudiste solucionar eso?

    – Vuelo de Sherwin

    20 de marzo a las 4:12

avatar de usuario
reinaldo novoa

En su registro de Taxonomía:

show_in_menu => true

A continuación, debe agregar una página de submenú:

$parent_slug = 'slug_for_parent_menu';
$page_title="Submenu Page Title";
$menu_title="Submenu Page Title";
$capability = 'manage_options';
$menu_slug = 'edit-tags.php?taxonomy=bla&post_type=custom_post_type_name';
$function = null;
$position = null;
add_submenu_page($parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function, $position);

finalmente:

add_filter('parent_file', 'menu_highlight');    
function menu_highlight($parent_file) {
    global $plugin_page, $submenu_file, $post_type, $taxonomy;
    if ('custom_post_type_name' == $post_type) {
        if ($taxonomy == 'bla') {
            $plugin_page="edit-tags.php?taxonomy=bla&post_type= custom_post_type_name"; // the submenu slug 
            $submenu_file="edit-tags.php?taxonomy=bla&post_type= custom_post_type_name";    // the submenu slug
        }
    } 
    return $parent_file;
}

Espero poner todo eso correctamente. Anide cualquier otro si está dentro de la verificación de taxonomía y agregue lo mismo para otros tipos de publicaciones.

Digamos que nuestro slug de taxonomía será vendor y el menú principal en el que queremos ponerlo será my_menu.

Para otorgar acceso, el valor predeterminado manage_categories capacidad se usa Esto debe coincidir con el proporcionado para register_taxonomy función en el capabilities matriz pasada en el $args argumento.

add_action('admin_menu', function (): void {
    add_submenu_page(
        'my_menu',              // parent_slug
        'Vendors',              // page_title
        'Vendors',              // menu_title
        'manage_categories',    // capability
        'edit-tags.php?taxonomy=vendor' // menu_slug
    );
});

add_action('parent_file', function (string $parent_file): string {
    global $current_screen;

    if ($current_screen->taxonomy === 'vendors') {
        return 'my_menu';
    }

    return $parent_file;
});

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad