- PVSM.RU - https://www.pvsm.ru -
С массовым появлением тем с обширными настройками и произвольными типами записей для всего подряд, в том числе и для вывода блоков на главной посадочной странице, тема тонкой работы с их расширенными возможностями становится более актуальной.
Их действительно становится всё больше в последнее время, и это радует. Посмотрите сами хотя бы на эту подборку [1], а она довольно старая — 11 июля 2011 года.
Сегодня был как раз случай интересного опыта взаимодействия с такими возможностями. Взял тему с типом записей для вывода блоков на главной, прицепил к ней дочернюю — всё как положено, без непосредственного редактирования файлов родительской темы. Захотелось добавить типу записей, зарегистрированному в родительской теме, значок для меню в Консоли — автор почему-то не позаботился (может быть, не знал, что набор Fugue Icons [2] прекрасно подходит для этого?)
В результате недолгих поисков выяснил простую конструкцию для переопределения параметров типа записей WordPress в дочерней теме.
function change_cpt_options() {
$GLOBALS['wp_post_types'][$post_type]->$parameter = $new_parameter
}
add_action( 'init', 'change_cpt_options', 11 );
init
с приоритетом 11
— это порядок применения действия, больший на еденицу, чем стандартный; если функция не сработает, необходимо посмотреть, с каким порядковым номером был зарегистрирован тип записей в родительской теме (ищите register_post_type
в functions.php
или где-то ещё в недрах родительской темы) и выставить большее число, только не пишите там 999, пожалуйста$GLOBALS['wp_post_types']
— это обращение к глобальной переменной, хранящей в себе все параметры типов записей, которыми на данный момент оперирует WordPress; можно обратиться без капса: global $wp_post_types; $wp_post_types
, но так длиннее выходит, поэтому пишу капсом, зато без повторений$post_type
— это имя типа записей, которому необходимо поменять какой-либо из параметров, определённых функцией register_post_type()
, тип: строка (в кавычках)stdClass Object
), например — labels->name
для переопределения имени типа записей$new_parameter
— это новый параметр, которым необходимо заменить старый, тип: строка (в кавычках)Пример применения:
$GLOBALS['wp_post_types']['homepage']->menu_icon = wp_get_attachment_url(kc_get_option('leta', 'post-type-icons', 'homepage'));
Здесь переопределяю значок для меню в Консоли типу записей homepage
, используя изображение, указанное в панели настоек, созданной расширением KC Settings [4].
Автор: Grawl
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/wordpress/24274
Ссылки в тексте:
[1] эту подборку: http://webexpedition18.com/articles/the-most-flexible-wordpress-themes-widgetized-front-page-and-extensive-options/
[2] Fugue Icons: http://p.yusukekamiyamane.com/
[3] здесь: http://codex.wordpress.org/Function_Reference/get_post_type_object#Examples
[4] KC Settings: http://wordpress.org/extend/plugins/kc-settings/
[5] Источник: http://habrahabr.ru/post/165051/
Нажмите здесь для печати.