web-dev-qa-db-fra.com

Modifier l'élément de menu de niveau supérieur pour qu'il pointe vers un élément de sous-menu personnalisé

J'utilise un plugin appelé CMS Page Order http://wordpress.org/extend/plugins/cms-page-order/ (maintenant appelé en tant que CPO)

C'est assez simple, ledit plugin ajoute un nouvel élément au sous-menu de chaque type de message personnalisé. L'élément de menu mène à une page où vous pouvez réorganiser les publications d'un type de publication donné.

J'ai ajouté afin que vous puissiez créer de nouveaux articles directement à partir de cette vue. En gros, c'est comme l'affichage par défaut des articles modifiés dans Wordpress, mais vous pouvez également réorganiser vos articles. Cela rend la page d'édition habituelle assez inutile.

Ma question est donc . Y a-t-il un moyen de supprimer l'élément de sous-menu "Tous après type " (edit.php?post_type=nameofposttype) en le remplaçant avec cet élément de menu créé par CPO tout en faisant en sorte que l'élément de menu de niveau supérieur lui-même pointe vers la page créée par CPO.

–––

Ce que j'ai essayé de faire est d'essayer de remplacer l'élément de menu de niveau supérieur par l'URL de l'élément de sous-menu créé par CPO à l'aide de l'éditeur de menus du plug-in Admin, mais il semble que la modification de l'URL via le plug-in ne soit pas autorisée. J'ai ensuite essayé de déplacer l'élément de menu CPO en haut du sous-menu car j'ai remarqué que l'élément de menu de niveau supérieur pointe vers l'élément de sous-menu le plus haut (c'est-à-dire "Toutes les pages/publications"). Cela n'a pas fonctionné non plus, car il produit une URL erronée (cela fait pointer l'élément de menu de niveau supérieur sur admin.php?page=order-xxx).

Voici quelques images pour expliquer davantage ce que je veux dire. Here's how the top level item regurlarly behaves

Voici comment l’élément de niveau supérieur se comporte par défaut (edit.php?post_type=xxx)

Now here's what happens if I move my page with the special menu handler to the top. The top level item gets a new URL, but it's erroneous

Maintenant, voici ce qui se passe si je déplace ma page avec le gestionnaire de menus spécial vers le haut. L'élément de niveau supérieur obtient une nouvelle URL, mais elle est erronée (admin.php?page=order-xxx)

Here's the url that the special menu handler page has, the URL that the top level menu item should have

Voici l'URL de la page du gestionnaire de menus spécial, l'URL que devrait posséder l'élément de menu de niveau supérieur (edit.php?post_type=xxx&page=order-xxx).

Alors, comment puis-je changer l'élément de menu de niveau supérieur pour l'URL que je veux?

1
INT

Vous pouvez également modifier le menu avec les variables globales de WordPress pour afficher le menu et le sous-menu. Tous les premiers éléments sont dans la var $menu et tous les suparts sont dans $submenu.

Également un petit exemple pour changer l'ordre des éléments de sous-menu avec edit.php. Ajouter le plugin thius et voir le résultat via le débogage. La fonction fb_cmp est uniquement la logique de réorganisation, mais vous pouvez définir votre ordre personnalisé dans cette fonction. Elle est le rappel pour usort .

<?php
/**
 * Plugin Name: .my Tests
 * Plugin URI:  http://bueltge.de/
 * Description: 
 * Version:     0.0.1
 */

add_action( 'admin_init', 'fb_get_menu' );
function fb_get_menu() {
    global $menu, $submenu;

    var_dump( $submenu['edit.php'] );
    usort( $submenu['edit.php'], 'fb_cmp' );
    echo '<hr>';
    var_dump( $submenu['edit.php'] );
}

function fb_cmp( $a, $b ) {

    if ($a->value == $b->value)
        return 0;
    else
        return $a->value < $b->value ? 1 : -1; // reverse order
}

Comme indice le résultat dans une capture d'écran. enter image description here

3
bueltge

avez-vous essayé de considérer jQuery? Peut-être que cela vous aidera. J'ai essayé et cela a fonctionné. Il suffit de mettre cela dans votre functions.php

add_action('admin_footer', 'change_post_url');
function change_post_url(){
?>
<script>
    jQuery(document).ready(function($){         
        $(".anchor_class_name").attr("href","sample.php");
    });
</script>
<?php
}
1
loQ

Après tout, vous pouvez simplement utiliser add_query_arg( 'key', 'value' ); lors de l’enregistrement de la page.

J'ai expliqué les détails du système de menu d'administration WordPress dans cet article de blog . Je ne peux pas poster ceci car c'est beaucoup trop et beaucoup trop.

0
kaiser