各投稿タイプのサブメニューとして、管理メニューに投稿/ページリストを表示するプラグインを書いています。これが私の得たコードです。 http://Pastebin.com/DmUGfzxN
リストは見事にリンクしています。ただし、メディアなどの別のメニューに移動して投稿(この場合は画像)を編集するときに問題が発生します。 WordPressが管理メニューに使う現在のクラスは間違った場所を指していて、Pagesのメニューを開き、最後のサブメニュー項目をハイライトします。
私はこれがここに関連する問題だと思います: add_submenu_page()を使った管理メニューの現在のクラス
彼は、admin.php?=page...
のようなリンクではなく、サブメニューページをページスラッグに追加することでそれを解決しました。残念ながら、私は自分のサブメニューをPost、Pageなどの下に置きたいので、edit.php
とedit.php?post_type=...
を使う必要があります。
誰かがこの癖/バグを回避する方法について何かアイデアを持っているなら、私はそれをいただければ幸いです。ありがとうございました。
私はコードを書き直しました:
/*
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を追加しました。上記のコード貼り付けを参照してください。
次に、子ページの表示について検討します。