Связывание пользовательского элемента подменю с типом записи элемента меню верхнего уровня


Я работаю над плагином, который устанавливает страницы подменю меню администратора для всех различных типов сообщений.

Мне нужно иметь возможность связать эти новые страницы подменю с соответствующим типом записи пункта меню верхнего уровня. Возможно ли это без необходимости полагаться на использование $_GET?

Я вижу, что $typenow используется в edit.php, но я не могу использовать это на своей пользовательской странице, так как она возвращает только NULL.

Итак, в основном: как мне установить соответствующий/ассоциированный тип записи для пользовательского пункт меню.

ОБНОВЛЕНО:

Вот изображение, которое, надеюсь, немного лучше описывает то, что мне нужно. http://i.imgur.com/4q4Dy.jpg

Как и сейчас, Пользовательский элемент в подменю доступен только тогда, когда Страницы активны, так как в противном случае $_GET не может получить post_type.

Я использую:

$post_type = esc_attr( $_GET['post_type'] );
$post_type_object = get_post_type_object( $post_type );    
$title = $post_type_object->labels->name;

$page = add_submenu_page( 'edit.php?post_type=' . $post_type, $title, $title, 'edit_pages', 'order-' . $post_type, 'cmspo_menu_order_page' );

Поэтому мне нужен способ выбрать соответствующий тип записи, с которым должен быть связан пользовательский элемент, в данном случае это "страница", но под каждым пользовательским сообщением будут пользовательские элементы введите, который был зарегистрирован в capability_type "страница", а не "сообщение".

Author: INT, 2012-08-03

1 answers

Вам нужна информация о текущем типе записи в вашей функции обратного вызова, которая выводит вывод страницы подменю. И на данный момент есть много готовой информации:

add_action( 'admin_menu', 'wpse_60730_demo_submenu' );

/**
 * Register sub menu pages.
 *
 * Note that get_current_screen() is still NULL now.
 *
 * @wp-hook admin_menu
 * @return void
 */
function wpse_60730_demo_submenu()
{
    // get public post types
    $post_types = get_post_types( array ( 'public' => TRUE ) );

    foreach ( $post_types as $post_type )
    {
        add_submenu_page(
            "edit.php?post_type=$post_type",
            "Extra $post_type", // this should be made translatable
            "Extra $post_type", // this too
            "edit_{$post_type}s",
            "order-$post_type",
            'wpse_60730_demo_callback'
        );
    }
}
/**
 * Render the sub menu page output.
 *
 * All information is set now.
 *
 * @return void
 */
function wpse_60730_demo_callback()
{
    $screen = get_current_screen();
    global $typenow, $parent_file;
    print "<pre>get_current_screen()\n" . htmlspecialchars( print_r( $screen, TRUE ) ) . '</pre><hr>';
    print "<pre>\$typenow: " . htmlspecialchars( print_r( $typenow, TRUE ) ) . '</pre><hr>';
    print "<pre>\$parent_file: " . htmlspecialchars( print_r( $parent_file, TRUE ) ) . '</pre>';
}

Результат

enter image description here

 3
Author: fuxia, 2012-08-07 23:25:42