Intereting Posts
Включить шаблон главной страницы в шаблон определенной категории. Что делать с разделяемыми словами в WordPress 4.2? Перепишите query_var, который является term_id с иерархическими слизнями на неархивированных страницах OOP: отображать предупреждение и деактивировать плагин, если версия PHP меньше 5.4 Ограничить поиск WordPress в пользовательское поле Azure WordPress site – URL-адреса, которые не отображаются при переходе из корневого каталога в подкаталог Как WordPress генерирует URL-пули? Скопировать папку в другую папку с помощью файловой системы WP Как установить пользовательский тип сообщения в качестве заголовка сообщения, чтобы избежать «Автопроекта», Как я могу получить массив / список всех текущих пунктов меню администратора WordPress? Пользовательский тип сообщения с определенной категорией Как загрузить wp_editor через AJAX Отображение персонализированного типа сообщений по первой букве посредством пользовательской таксономии Кажется, что OEMBED перестала работать Добавьте предопределенные / значения по умолчанию в настраиваемый плагин post

Выделение пункта меню по названию сообщения

С помощью нескольких пользователей мои последние два вопроса выделяли пользовательский пункт меню через его идентификатор.

Теперь я пытаюсь объединить код из следующих двух функций, чтобы заставить его работать с помощью Post Name:

Добавить выделение в новый пункт меню панели управления администратора

add_action( 'admin_menu', 'create_menu' ); add_action( 'admin_head-post.php', 'wpse_58567_highlight_menu_item' ); function create_menu() { $settings_page = add_menu_page( 'Edit_Post_69', 'Edit_Post_69', 'add_users', '/post.php?post=69&action=edit', '', get_stylesheet_directory_uri() . '/editicon.png', 2 ); } function wpse_58567_highlight_menu_item() { global $post; if( 69 != $post->ID ) return; ?> <script type="text/javascript"> jQuery(document).ready( function($) { $('#toplevel_page_post-post-69-action-edit').removeClass('wp-not-current-submenu').addClass('current'); $('#toplevel_page_post-post-69-action-edit').find('a:last').addClass('current'); }); </script> <?php } 

а также….

Преобразовать имя сообщения в идентификатор сообщения

 $post = get_page_by_title( $post_name, OBJECT, 'post' ); echo $post->ID; 

Теперь я пытаюсь объединить их, чтобы я мог указать имя сообщения вместо идентификатора сообщения, может ли кто-нибудь указать мне в правильном направлении?

Solutions Collecting From Web of "Выделение пункта меню по названию сообщения"

Внимание к использованию параметров get_page_by_title .

А также к использованию синтаксиса Heredoc PHP .

 $the_post_title = 'The Portfolio'; add_action( 'admin_menu', 'wpse_59050_add_menu' ); add_action( 'admin_head-post.php', 'wpse_59050_highlight_menu_item' ); function wpse_59050_add_menu() { global $the_post_title; $our_page = get_page_by_title( $the_post_title ); $settings_page = add_menu_page( 'Edit '.$our_page->post_title, 'Edit '.$our_page->post_title, 'add_users', '/post.php?post='.$our_page->ID.'&action=edit', '', '', 2); } function wpse_59050_highlight_menu_item() { global $the_post_title, $post; if( !is_object( $post ) ) return; $our_page = get_page_by_title( $the_post_title ); if( $our_page->ID != $post->ID ) return; echo <<<HTML <script type="text/javascript"> jQuery(document).ready( function($) { $('#toplevel_page_post-post-{$our_page->ID}-action-edit').removeClass('wp-not-current-submenu').addClass('current'); $('#toplevel_page_post-post-{$our_page->ID}-action-edit').find('a:last').addClass('current'); }); </script> HTML; } 

Результат :
введите описание изображения здесь

Существует гораздо более простой способ установки текущего контекста меню – фильтра parent_file .

 add_filter( 'parent_file', array( 'WPSE_59050', 'parent_file' ) ); add_action( 'admin_menu', array( 'WPSE_59050', 'admin_menu' ) ); class WPSE_59050 { /** * The title of the post to add our menu item for. */ const POST_TITLE = 'My Post Title'; /** * Our cached post ID from title. * * @var int */ private static $_post_id; /** * Correctly set the menu context if we're editing our post. * * @return string */ public static function parent_file( $parent_file ) { global $pagenow; if ( $pagenow == 'post.php' && isset( $_REQUEST['post'] ) && $_REQUEST['post'] == self::get_post_id() ) $parent_file = "post.php?post={$_REQUEST['post']}&action=edit"; return $parent_file; } /** * Add the menu item if the post can be found. */ public static function admin_menu() { if ( $post_id = self::get_post_id() ) add_menu_page( 'Edit ' . self::POST_TITLE, 'Edit ' . self::POST_TITLE, 'add_users', "/post.php?post=$post_id&action=edit" ); } /** * Get our post ID from the title & cache it. * * @return int */ public static function get_post_id() { if ( ! isset( self::$_post_id ) ) { if ( $post = get_page_by_title( self::POST_TITLE, OBJECT, 'post' ) ) self::$_post_id = $post->ID; else self::$_post_id = null; } return self::$_post_id; } } 

Обновление: Изменено меню и название страницы, чтобы использовать заголовок сообщения, а не идентификатор.

 add_filter( 'parent_file', 'parent_file_hover' ); function parent_file_hover( $parent_file ) { global $pagenow; if ( $pagenow == 'post.php') $parent_file = "post.php?post={$_REQUEST['post']}&action=edit"; elseif($pagenow == 'post-new.php') $parent_file = "post-new.php?post_type={$_REQUEST['post_type']}"; return $parent_file; }