Я унаследовал плагин Wordpress, который делает настраиваемые поля доступными при редактировании страниц и / или сообщений. Он добавляет немного другой контент для страниц, чем для постов. Плагин определяет страницу или сообщение со следующим:
if(preg_match('|post.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|post-new.php|i', $_SERVER['SCRIPT_NAME'])) {
add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'post', 'advanced', 'core');
} elseif(preg_match('|page.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|page-new.php|i', $_SERVER['SCRIPT_NAME'])) {
add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'page', 'advanced', 'core');
}
Это работало нормально в старых версиях Wordpress, потому что они использовали post.php в URL при редактировании posts и page.php при редактировании страниц. Теперь, однако, Wordpress не делает этого. Сообщения и страницы редактируются с помощью URL-адреса, который выглядит следующим образом: post.php?post=4&action=edit
, поэтому единственным возможным идентификатором в URL-адресе является номер сообщения.
Итак, как мне определить, редактирую ли я страницу или сообщение? Есть ли функция Wordpress, которая может легко сказать мне это? Это единственный вариант, чтобы получить номер поста и как-то проверить его, чтобы увидеть, что это такое?
Как бы вы подошли к этому?
EDIT:
Вот что я сделал ...
вместо того, чтобы делать preg_match, я получил глобальный $ id, использовал get_all_page_ids()
, чтобы получить список всех страниц, и сопоставил $ id с идентификаторами в массиве get_all. Если есть совпадение, сделайте страницу add_meta_box, если не сделайте пост один.
Я также перенес извлечение из цикла, в котором он сохранял кучу времени для рендеринга страницы. Теперь я установил флаг прямо в начале, и в цикле рендеринг этих meta_boxes просто проверяется, установлен ли этот флаг.