С массовым появлением тем с обширными настройками и произвольными типами записей для всего подряд, в том числе и для вывода блоков на главной посадочной странице, тема тонкой работы с их расширенными возможностями становится более актуальной.
Их действительно становится всё больше в последнее время, и это радует. Посмотрите сами хотя бы на эту подборку, а она довольно старая — 11 июля 2011 года.
Сегодня был как раз случай интересного опыта взаимодействия с такими возможностями. Взял тему с типом записей для вывода блоков на главной, прицепил к ней дочернюю — всё как положено, без непосредственного редактирования файлов родительской темы. Захотелось добавить типу записей, зарегистрированному в родительской теме, значок для меню в Консоли — автор почему-то не позаботился (может быть, не знал, что набор Fugue Icons прекрасно подходит для этого?)
В результате недолгих поисков выяснил простую конструкцию для переопределения параметров типа записей 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()
, тип: строка (в кавычках)- $parameter — это путь к параметру, полный список которых можно увидеть здесь (код, начинающийся с фразы
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.
Автор: Grawl