web-dev-qa-db-fra.com

Mauvaise classe en cours dans le menu administrateur avec add_submenu_page ()

J'écris un plugin qui affiche une liste de messages/pages dans le menu administrateur, sous la forme d'un sous-menu pour chaque type de message. Voici le code que j'ai loin: http://Pastebin.com/DmUGfzxN

Les listes montrent et relient bien. Cependant, j'ai un problème lorsque je vais dans un autre menu, par exemple, Médias, et que je vais modifier un message (ou une image dans ce cas). La classe actuelle que WordPress utilise pour le menu administrateur pointe au mauvais endroit et ouvre le menu pour Pages, mettant en surbrillance le dernier élément de sous-menu.

Je crois que c’est un problème lié ici: Classe actuelle dans le menu administrateur en utilisant add_submenu_page ()

Il l'a résolu en ajoutant la page de sous-menu à un slug de page, au lieu d'un lien comme admin.php?=page.... Malheureusement, je veux que mes sous-menus soient sous Postes, Pages, etc., donc je dois utiliser edit.php et edit.php?post_type=....

Si quelqu'un a des idées sur la façon de contourner ce problème, je l'apprécierais. Je vous remercie.

1
Lio Eters

J'ai réécrit le code:

/*
Plugin Name: Admin Menu Post List
Plugin URI:
Description: Display a simple post list in admin menu for easy access
Version: 0.2
Author: Eliot Akira
Author URI:
License: GPL2
*/


/*
 * Load CSS in header
 */

function custom_post_list_view_css() { ?>

        <style>
                .post_list_view_headline {
                        padding-left: 10px !important;
                        padding-right: 10px !important;
                }
                .post_list_view_post {
                        margin-left:12px;
                }
                .post_current a {
                        color:white !important;
                }
    </style>

<?php }
add_action( 'admin_head', 'custom_post_list_view_css' );


/*
 * Admin Menu Post List
 */


add_action('admin_menu', 'custom_post_list_view');
function custom_post_list_view() {

        /*** Get options ***/

        $post_types = array( 'post', 'page' );

        $current_post_ID = $_GET['post']; /* Get current post ID on admin screen */

        foreach ($post_types as $post_type) {

                $custom_menu_slug = $post_type;
                $output = '';

                $args = array(
                        "post_type" => $post_type,
                        "parent" => "0",
                        "post_parent" => "0",
                        "numberposts" => "-1",
                        "orderby" => "menu_order",
                        "order" => "ASC",
                        "post_status" => "any",
                        "suppress_filters" => 0
                );

                $posts = get_posts($args);

                if($posts) {

                        $output .= '</a>';

                        $output .= '<div class="list_view_' . $post_type . '">'
                                                . '<div class="post_list_view_headline">' . '<hr>' . '</div>';
                        foreach ($posts as $post) {
                                $edit_link = get_edit_post_link($post->ID);
                                $title = get_the_title($post->ID);
                                $title = esc_html($title);
                                $output .= '<div class="post_list_view_post';
                                if($current_post_ID == ($post->ID)) {
                                        $output .= ' post_current';
                                }
                                $output .= '">'
                                        . '<a href="'
                                        . $edit_link    . '">'
                                        . $title . '</a></div>';

                                /*** Search for children? ***/

                        }
                        $output .= '</div>';

                        $output .= '<a>';

                        if($post_type == 'post') {
                                add_posts_page( "Title", $output, "edit_posts", $custom_menu_slug, "custom_post_list_view_page");
                        } else {
                                 if ($post_type == 'page') {
                                        add_pages_page( "Title", $output, "edit_pages", $custom_menu_slug, "custom_post_list_view_page");
                                } else {
                                        if($post_type == 'attachment') {
                                                 add_media_page("Title", $output, "edit_posts", $custom_menu_slug, "custom_post_list_view_page");
                                        } else {
                                                add_submenu_page(('edit.php?post_type=' . $post_type), "Title", $output, "edit_posts", ('edit.php?post_type=' . $post_type), "custom_post_list_view_page");
                                        }
                                }
                        }
                }
        } // End foreach post type
}

function custom_post_list_view_page() { /* Empty */ }

Maintenant, il affiche le sous-menu et la classe actuelle ne l’affecte pas. Là où je produis le sous-menu, j'ai changé le <ul> et le <li> en <div>. J'ai ajouté une vérification pour voir si l'élément de menu est égal à la publication en cours de modification, et un peu de CSS dans la admin_head pour mettre en surbrillance l'élément. Veuillez vous reporter au code coller ci-dessus.

Ensuite, je regarderai dans l'affichage des pages enfants.

1
Lio Eters