- PVSM.RU - https://www.pvsm.ru -

Переопределение параметров типа записей WordPress в дочерней теме

image

С массовым появлением тем с обширными настройками и произвольными типами записей для всего подряд, в том числе и для вывода блоков на главной посадочной странице, тема тонкой работы с их расширенными возможностями становится более актуальной.

Их действительно становится всё больше в последнее время, и это радует. Посмотрите сами хотя бы на эту подборку [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(), тип: строка (в кавычках)
  • $parameter — это путь к параметру, полный список которых можно увидеть здесь [3] (код, начинающийся с фразы 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/