Пользовательские типы записей: Как убрать редактор (-метабокс)
Я задаюсь вопросом, как можно избавиться от редактора записей (визуальный + HTML). Я попытался не регистрировать поддержку типа записи, но он все равно появляется (отмена регистрации прекрасно работает со всеми остальными стандартными метабоксами на экране редактирования записи). Также я пробовал отменить его регистрацию с помощью remove_meta_box, что тоже не сработало (работает для всего, кроме метабокса заголовка). Возможно, я что-то упускаю. Уже искал в интернете и не смог найти решение. Надеюсь, кто-нибудь подскажет. Спасибо!
P.S. Буду рад решению для отключения поля заголовка, но это второстепенно (его отсутствие при регистрации типа записи работает).
(Версия WordPress 3.0.4.)

Передача пустого массива в параметр 'supports' при объявлении типа записи убирает редактор, заголовок и все остальные стандартные блоки на странице редактирования записи.
$supports = array ('');
$args = array(
'label' => 'people',
'supports' => $supports,
'hierarchical' => false,
'public' => true,
'rewrite' => true
);
register_post_type( 'people', $args);
Результат:
Вы можете указать в 'supports' элементы, которые должны отображаться, такие как трекбэки, комментарии и т.д. Или просто оставьте его пустым, чтобы страница была пустой, за исключением блока сохранения записи. Если вам также нужно убрать метабоксы иерархической таксономии, обязательно посетите эту страницу.

Пока что спасибо. Моя проблема в том, что я не могу установить все значения пустыми. Я написал три класса для ускорения создания пользовательских типов записей, таксономий и тегов. У них есть значения по умолчанию. В случае с пользовательскими типами записей это просто всё. Но мне нужно отключить некоторые блоки для определенных типов записей. И для одного типа мне нужно отключить и блок редактора.

Мне интересно, что вы имеете в виду под "установить все значения пустыми"? Если вы хотите убрать редактор, просто не добавляйте 'editor' в массив 'supports' при создании типа записи в вашем классе.

@kaiser если это ваши собственные классы, в чем проблема? Настройте их обработку?..

@Rarst: Это лишь база, которая выполняет следующие действия: регистрирует типы записей и таксономии из массива и предоставляет фильтры для $labels и $args (по умолчанию и специфические). Класс для терминов только создает неудаляемые термины, которые обновляются и назначаются из массива. Метабоксы можно легко реализовать без класса, и для меня не имело бы смысла их интегрировать. Эти классы существуют только для экономии моего времени и предотвращения удаления клиентами терминов, необходимых системе. Но спасибо, что посмотрели. Ваша помощь очень ценится (снова) :)

@Manny Fleurmond: Я повторно использую эти классы в разных конфигурациях (часть моего фреймворка). Я не хочу менять поведение по умолчанию "поддерживает все". У меня есть фильтры, чтобы изменить это для всех типов записей или только для конкретных (переопределить или добавить к $args). Они работают для всего, кроме редактора. Я также пробовал функцию remove_meta_box без успеха (и для метабокса заголовка тоже).

Звучит несколько жестко. Возможно, стоит переписать ваш класс так, чтобы можно было изменять некоторые настройки по умолчанию для каждого экземпляра отдельно. Так у вас будет лучший контроль над тем, что появляется при создании пользовательского типа записи.

@kaiser смысл аргументов по умолчанию в том, что их можно переопределить нестандартными значениями, когда это необходимо. В противном случае это не аргументы по умолчанию, а жёстко заданные параметры, что действительно делает настройку негибкой.

@Rarst: Кажется, ты меня не так понял. Я устанавливаю фильтр после меток и аргументов, как в следующем примере. В $args включено всё, кроме структуры постоянных ссылок, которая задаётся согласно опции в базе данных после фильтра. Так что нет, это не жёстко заданные параметры.
// Фильтр для всех пользовательских типов записей (изменяет поведение по умолчанию) $args = apply_filters( 'config_cpt_args', $args ); // Фильтр для конкретного пользовательского типа записей $args = apply_filters( 'config_cpt_args_'.$post_type_name, $args );

@kaiser тогда в чём проблема с установкой supports
в пустой массив через фильтр?

@Rarst: Проблема в том, что редактор (и заголовок) просто не хотят исчезать...

Если вы не передаёте аргумент supports
, используются настройки по умолчанию 'title', 'editor'
(где "ничего" означает любое значение, которое empty()
считает пустым).
Однако, так же, как вы можете добавить поддержку функциональности после регистрации типа записи с помощью add_post_type_support( $post_type, $feature )
, вы можете удалить поддержку, вызвав remove_post_type_support( $post_type, $feature )
. Таким образом, вызов этой функции после регистрации вашего типа записи должен удалить редактор:
remove_post_type_support( 'my_post_type', 'editor' );
Эти функции просто работают с глобальной переменной $_wp_post_type_features
, но всегда лучше использовать API-функции, чем изменять её вручную.

РЕШЕНИЕ! Я всегда думал, что это используется только для удаления, например, миниатюр или nav_menu через дочернюю тему. Большое спасибо!

Ой, я упустил этот момент. Хорошее замечание — передача пустого массива будет интерпретирована как пустое значение... Передача пустых значений всегда такая головная боль, это контр-интуитивно, что они трактуются как значение по умолчанию, а не как ничего. :(

@Rarst: Думаю, это также сработает, если передать фиктивное название фичи. Это просто ключ массива, так что неважно, если будут вставлены фиктивные данные. Я как-то использовал 0.1
вместо 0
для параметра, чтобы пройти проверку empty()
.

@Jan Fabry да, это не первый раз, когда я наступаю на мину empty()
. Как сказано выше - крайне неинтуитивно.

Хм. Это не работает с ключами, и поэтому я думаю, что "пустые значения" могут стать еще одной "миной" при будущем обновлении (попробуй потом найти плохое значение). В любом случае: спасибо вам обоим! :)
Правка: было бы удобно, если бы значения не просто присутствовали, а были в виде пар ключ/значение. Например: 'support' => array('thumbnail' => true, 'editor' => false);

Я использую плагин Custom Post Type UI для создания пользовательских типов записей. С помощью этого плагина можно отключить редактор записей в разделе дополнительных настроек.
Управление типом записи → Просмотр дополнительных настроек
Вот ссылка на плагин: http://wordpress.org/extend/plugins/custom-post-type-ui/
Примечание: он также позволяет отключить поле заголовка :)

Как я уже говорил, я написал три класса и поэтому не могу перейти на плагин. Да и вообще, я бы даже не рассматривал использование плагина. Плагины (по моему мнению) предназначены для разработки или легко заменяемых вещей, таких как формы комментариев, а не для ключевых элементов, таких как типы записей или таксономии. В любом случае, спасибо!

На самом деле плагины могут настраивать практически всё в WordPress, включая пользовательские типы записей. Сейчас я как раз создаю плагин, который создаёт несколько типов записей, их метабоксы и различные пользовательские поля.

Ознакомьтесь с функцией register_post_type(); в кодексе. В разделе Аргументы прокрутите вниз до пункта Supports.
Начиная с версии 3.5, можно передавать булево значение false
вместо массива, чтобы отключить поведение по умолчанию (заголовок и редактор).
Или настройте ваш пользовательский тип записи как вам нужно, добавляя нужные значения, например:
'supports' => array(
'title',
'author',
'thumbnail',
'post-formats'
),
Эти поддерживаемые опции в моем массиве будут отображаться в админке WordPress.

Вы также можете задать стили для страницы редактирования в админке, чтобы скрыть определенные элементы, такие как редактор и т.д.
function custom_colors() {
echo '<style type="text/css">
body.post-type-events #postdivrich {
display: none;
}
</style>';
}
add_action('admin_head', 'custom_colors');
