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

в 10:32, , рубрики: wordpress, Веб-разработка, метки:

image

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

Их действительно становится всё больше в последнее время, и это радует. Посмотрите сами хотя бы на эту подборку, а она довольно старая — 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js