web-dev-qa-db-de.com

Menü und Untermenü in Admin mit einer URL anstelle von Slug hinzufügen?

Ich benutze diese Funktion und Haken:

function mysite_admin_menu() 
{
  add_menu_page( 'Categories', 'Catégories', 'administrator', 'categories', 'a_function' );
  add_submenu_page( 'categories', 'Manage', 'Manage', 'administrator', 'xxx', 'a_function' );
  remove_submenu_page('categories','categories');
}
add_action( 'admin_menu', 'mysite_admin_menu' );

Es zeigt an, was ich brauche: ein Menü mit einem Untermenü in der linken Admin-Menüleiste.

Die Sache ist, das Untermenü führt zu dieser Seite: admin.php?page=xxx.

Wie kann ich einen Link zu einer URL wie edit-tags.php?taxonomy=category erstellen?

Wenn ich den Slug im add_submenu_page durch eine relative URL tausche, führt der Link zu admin.php?page=edit-tags.php?taxonomy=category.

Was auch immer ich tue, ich bekomme immer admin.php?page=..., was nicht das ist, was ich will.

4
Baylock

Dies ist ein alter Beitrag, aber Sie können nicht einfach WordPress $menu und/oder $submenu Globals verwenden, wie Oleg es in Nummer 2 vorgeschlagen hat.

Im Zweifelsfall kopieren Sie WordPress :

wordpress/wp-admin/menu.php

Zum Beispiel, um einen Link hinzuzufügen, sieht es so aus, als würde es funktionieren:

function add_external_link_admin_submenu() {
    global $submenu;
    $permalink = admin_url( 'edit-tags.php' ).'?taxonomy=category';
    $submenu['options-general.php'][] = array( 'Manage', 'manage_options', $permalink );
}
add_action('admin_menu', 'add_external_link_admin_submenu');

Sie können den $permalink = ... durch irgendetwas ersetzen

Das sollte also auch funktionieren:

$permalink = 'http://www.example.com';

Es wird auch empfohlen, "Administrator" nicht zu verwenden (obwohl ich es auch verwende. Lesen Sie auf jeden Fall dieses Ticket für alternative Lösungen.

10
Bryan Willis

Ich empfehle dir das nicht.

Nehmen wir an, Ihr Präfix für admin.php ist _trigger_me_

  1. Untermenü

    <?php
    
    function _clean_url_to_repalce_admin_menu($url, $original_url, $_context){
        if ($url == 'admin.php?page=_trigger_me_'){
            remove_filter('clean_url', '_clean_url_to_repalce_admin_menu', 10);
            //return admin_url('someotherpage.php);
            return 'http://google.com/';
        }
    }
    if (is_admin())
    add_filter('clean_url', '_clean_url_to_repalce_admin_menu', 10, 3);
    
  2. Hauptmenü

    <?php
    function custom_admin_menu_action_hook(){
        global $menu;
        foreach($menu as $k=>$item){
            if ($item[2] == '_trigger_me_'){
                    $menu[$k][2] = 'http://google.com';
            }
        }
    }
    add_action('admin_menu', 'custom_admin_menu_action_hook', 100);
    

Ich nenne beide Beispiele "Hacks". Sie können es tun, aber es ist besser, das nicht zu tun.

aktualisieren.

if case wenn mit redirection zufrieden =)

<?php
$hook = add_submenu_page($parent, $title, $menu_title, 'manage_option', 'callback');
add_action("load-{$hook}", create_function('','
    header("Location:", admin_url("someurl.php?blahblahblah"));
    exit;
'));

für den Fall, dass Sie dies durch eine Taxonomieseite ersetzen möchten (edit-tags.php)

<?php
add_action('admin_menu', 'admin_menu_edit_tags_page');
function admin_menu_edit_tags_page(){
    // please set $YOURPARENTSLUG as parent slug of your menu item (parent of your menu)
    // manage_tags to manage_terms of your taxonomy capability (its visible whan you var_dump($wp_taxonomies[$taxonomyyouwant]));
    add_submenu_page($YOURPARENTSLUG, 'menu', 'title', 'manage_tags',  'edit-tags.php?taxonomy=taxonomy');
}
2
Butuzov

Vielen Dank, Oleg, dein Skript funktioniert, bricht aber die Admin-Oberfläche (Hintergrundfarben und Bilder verschwinden aus irgendeinem Grund).

Aber wenn ich diesen Weg nehmen muss, kann ich das stattdessen tun:

function changeUrl()
{
    $pageURL = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

    if ($pageURL == 'http://www.mysite.com/wp-admin/admin.php?page=xxxx')
    {
        header ('location:http://www.mysite.com/wp-admin/edit-tags.php?taxonomy=category');
    }
}
add_action( 'admin_menu', 'changeUrl' );

Es scheint mir neugierig zu sein, dass es keine einfache Möglichkeit gibt, ein Untermenü mit einer URL zu verknüpfen. Diese Art der Umleitung ist chaotisch ... aber es funktioniert.

0
Baylock

Obwohl dies ein altes Problem ist, möchte ich zur Überlegung diesen Code beisteuern:

function mysite_admin_menu() 
{
  add_menu_page( 'Categories', 'Catégories', 'administrator', 'categories', 'a_function' );
  add_submenu_page( 'categories', 'Manage', 'Manage', 'administrator', 'manage_categories', 'mysite_manage_categories' );
  remove_submenu_page('categories','categories');
}
add_action( 'admin_menu', 'mysite_admin_menu' );

function mysite_manage_categories() 
{ 

?><script>window.location = "<?php echo admin_url('edit-tags.php?taxonomy=category'); ?>";</script><?php 
    }

es verwendet Javascript Redirect, anstatt eine weitere Add_action zu erstellen, um über http umzuleiten.

0
barudo