Связывание пользовательского элемента подменю с типом записи элемента меню верхнего уровня
Я работаю над плагином, который устанавливает страницы подменю меню администратора для всех различных типов сообщений.
Мне нужно иметь возможность связать эти новые страницы подменю с соответствующим типом записи пункта меню верхнего уровня. Возможно ли это без необходимости полагаться на использование $_GET
?
Я вижу, что $typenow
используется в edit.php
, но я не могу использовать это на своей пользовательской странице, так как она возвращает только NULL
.
Итак, в основном: как мне установить соответствующий/ассоциированный тип записи для пользовательского пункт меню.
ОБНОВЛЕНО:
Вот изображение, которое, надеюсь, немного лучше описывает то, что мне нужно.
Как и сейчас, Пользовательский элемент в подменю доступен только тогда, когда Страницы активны, так как в противном случае $_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
"страница", а не "сообщение".
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>';
}