web-dev-qa-db-ja.com

Add_submenu_page()で管理者メニューの誤った現在のクラス

各投稿タイプのサブメニューとして、管理メニューに投稿/ページリストを表示するプラグインを書いています。これが私の得たコードです。 http://Pastebin.com/DmUGfzxN

リストは見事にリンクしています。ただし、メディアなどの別のメニューに移動して投稿(この場合は画像)を編集するときに問題が発生します。 WordPressが管理メニューに使う現在のクラスは間違った場所を指していて、Pagesのメニューを開き、最後のサブメニュー項目をハイライトします。

私はこれがここに関連する問題だと思います: add_submenu_page()を使った管理メニューの現在のクラス

彼は、admin.php?=page...のようなリンクではなく、サブメニューページをページスラッグに追加することでそれを解決しました。残念ながら、私は自分のサブメニューをPost、Pageなどの下に置きたいので、edit.phpedit.php?post_type=...を使う必要があります。

誰かがこの癖/バグを回避する方法について何かアイデアを持っているなら、私はそれをいただければ幸いです。ありがとうございました。

1
Lio Eters

私はコードを書き直しました:

/*
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 */ }

これでサブメニューが表示され、現在の現在のクラスはそれに影響しません。サブメニューを出力するところで、<ul><li><div>に変更しました。メニュー項目が現在編集中の投稿と等しいかどうかを確認するチェックと、項目を強調表示するためのadmin_head内の小さなCSSを追加しました。上記のコード貼り付けを参照してください。

次に、子ページの表示について検討します。

1
Lio Eters