Пользовательские типы записей: Как убрать редактор (-метабокс)

13 янв. 2011 г., 06:30:30
Просмотры: 19.4K
Голосов: 12

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

P.S. Буду рад решению для отключения поля заголовка, но это второстепенно (его отсутствие при регистрации типа записи работает).

(Версия WordPress 3.0.4.)

0
Все ответы на вопрос 5
13
20

Передача пустого массива в параметр 'supports' при объявлении типа записи убирает редактор, заголовок и все остальные стандартные блоки на странице редактирования записи.

$supports = array ('');
    $args = array(
      'label' => 'people',
      'supports' => $supports,
      'hierarchical' => false,
      'public' => true,
      'rewrite' => true
         );

    register_post_type( 'people', $args);

Результат: Скриншот пустой страницы редактирования Вы можете указать в 'supports' элементы, которые должны отображаться, такие как трекбэки, комментарии и т.д. Или просто оставьте его пустым, чтобы страница была пустой, за исключением блока сохранения записи. Если вам также нужно убрать метабоксы иерархической таксономии, обязательно посетите эту страницу.

13 янв. 2011 г. 07:04:21
Комментарии

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

kaiser kaiser
13 янв. 2011 г. 07:58:51

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

Manny Fleurmond Manny Fleurmond
13 янв. 2011 г. 08:09:40

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

Rarst Rarst
13 янв. 2011 г. 08:26:13

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

kaiser kaiser
13 янв. 2011 г. 08:33:48

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

kaiser kaiser
13 янв. 2011 г. 08:35:44

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

Manny Fleurmond Manny Fleurmond
13 янв. 2011 г. 08:41:20

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

Rarst Rarst
13 янв. 2011 г. 08:47:18

@Rarst: Кажется, ты меня не так понял. Я устанавливаю фильтр после меток и аргументов, как в следующем примере. В $args включено всё, кроме структуры постоянных ссылок, которая задаётся согласно опции в базе данных после фильтра. Так что нет, это не жёстко заданные параметры.

// Фильтр для всех пользовательских типов записей (изменяет поведение по умолчанию) $args = apply_filters( 'config_cpt_args', $args ); // Фильтр для конкретного пользовательского типа записей $args = apply_filters( 'config_cpt_args_'.$post_type_name, $args );

kaiser kaiser
13 янв. 2011 г. 08:50:19

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

Rarst Rarst
13 янв. 2011 г. 09:04:34

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

kaiser kaiser
13 янв. 2011 г. 09:31:37

@Rarst: Какое-то "подобие" решения, как в третьем ответе...

kaiser kaiser
13 янв. 2011 г. 09:37:18

Только что попробовал ещё раз - работает.

kaiser kaiser
24 авг. 2012 г. 00:37:19

Рад, что помогло!

Manny Fleurmond Manny Fleurmond
24 авг. 2012 г. 04:51:55
Показать остальные 8 комментариев
6
17

Если вы не передаёте аргумент 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-функции, чем изменять её вручную.

13 янв. 2011 г. 10:25:38
Комментарии

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

kaiser kaiser
13 янв. 2011 г. 10:38:06

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

Rarst Rarst
13 янв. 2011 г. 11:31:03

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

Jan Fabry Jan Fabry
13 янв. 2011 г. 11:36:27

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

Rarst Rarst
13 янв. 2011 г. 11:42:46

Хм. Это не работает с ключами, и поэтому я думаю, что "пустые значения" могут стать еще одной "миной" при будущем обновлении (попробуй потом найти плохое значение). В любом случае: спасибо вам обоим! :)

Правка: было бы удобно, если бы значения не просто присутствовали, а были в виде пар ключ/значение. Например: 'support' => array('thumbnail' => true, 'editor' => false);

kaiser kaiser
13 янв. 2011 г. 11:59:00

Хороший ответ, @Jan.

Manny Fleurmond Manny Fleurmond
13 янв. 2011 г. 17:17:13
Показать остальные 1 комментариев
3

Я использую плагин Custom Post Type UI для создания пользовательских типов записей. С помощью этого плагина можно отключить редактор записей в разделе дополнительных настроек.

Управление типом записи → Просмотр дополнительных настроек

Вот ссылка на плагин: http://wordpress.org/extend/plugins/custom-post-type-ui/

Примечание: он также позволяет отключить поле заголовка :)

13 янв. 2011 г. 07:01:59
Комментарии

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

kaiser kaiser
13 янв. 2011 г. 08:00:22

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

Manny Fleurmond Manny Fleurmond
13 янв. 2011 г. 08:29:37

@Manny Fleurmond: Если собираешься поделиться, сбрось мне ссылку. Я всё ещё размышляю о том, чтобы, возможно, написать процедуру для продвинутых метабоксов в своих классах.

kaiser kaiser
13 янв. 2011 г. 08:37:01
0

Ознакомьтесь с функцией register_post_type(); в кодексе. В разделе Аргументы прокрутите вниз до пункта Supports.

Начиная с версии 3.5, можно передавать булево значение false вместо массива, чтобы отключить поведение по умолчанию (заголовок и редактор).

Или настройте ваш пользовательский тип записи как вам нужно, добавляя нужные значения, например:

'supports' => array(
    'title',
    'author',
    'thumbnail',
    'post-formats'
),

Эти поддерживаемые опции в моем массиве будут отображаться в админке WordPress.

14 сент. 2015 г. 22:04:09
1
-2

Вы также можете задать стили для страницы редактирования в админке, чтобы скрыть определенные элементы, такие как редактор и т.д.

function custom_colors() {
   echo '<style type="text/css">
            body.post-type-events #postdivrich {
            display: none;
            }
         </style>';
}

add_action('admin_head', 'custom_colors');
3 сент. 2014 г. 21:55:43
Комментарии

Спасибо за ваш ответ, но это (а) сделает его неудаляемым, так как он не зарегистрирован в API зависимостей, и (b) сделает его доступным для людей, которые умеют пользоваться инструментами разработчика в браузере.

kaiser kaiser
3 сент. 2014 г. 22:20:09