Изменение внешнего вида пользовательских таксономических входов

14

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

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

Трэвис Норткатт
источник
+1 Хороший вопрос. Это также было бы хорошо для проекта, над которым я тоже работаю. Более того, пользовательская таксономия должна быть выпадающим меню вместо списка «категорий».
Зак
Да, выпадающий список был бы также хорош.
Трэвис Норткатт
1
Эти два вопроса, похоже, имеют дело с очень похожей проблемой: пользовательский тип сообщения - выпадающее меню таксономии? и нужна помощь в сохранении терминов таксономии
Михал Мау
Вместо того, чтобы пытаться изменить существующий метабокс, вы можете попытаться удалить метабокс по умолчанию для данной таксономии, а затем зарегистрировать свой собственный для вызова пользовательской функции, которая отображает термины в радиогруппе, и это будет связано с две ссылки предоставлены maugly выше.
t31os

Ответы:

13

Конечно, просто используйте CSS и 'admin_head'крючок, чтобы он исчез. Я считаю, что это то, что вы ищете?

Иерархическая запись таксономии на странице публикации WordPress без родителя
(источник: mikeschinkel.com )

Просто добавьте следующее в functions.phpфайл вашей темы или в .phpфайл плагина, который вы, возможно, пишете. Обратите внимание, что я включил 'init'крючок для определения типа поста «Дом» и таксономии «Баня», чтобы другим было проще следовать примеру. Также обратите внимание , что если ваша таксономия называется Ванны» вам необходимо изменить селектор CSS , чтобы быть #newbaths_parentвместо #newbath_parent:

add_action('admin_head','remove_bath_parents');
function remove_bath_parents() {
  global $pagenow;
  if (in_array($pagenow,array('post-new.php','post.php'))) { // Only for the post add & edit pages
    $css=<<<STYLE
<style>
<!--
#newbath_parent {
  display:none;
}
-->
</style>
STYLE;
    echo $css;
  }
}
add_action('init','add_homes_and_baths');
function add_homes_and_baths() {
  register_post_type('home',
    array(
      'label'           => 'Homes',
      'public'          => true,
      'rewrite'         => array('slug' => 'homes'),
      'hierarchical'    => false,
    )
  );
  register_taxonomy('bath', 'home', array(
    'hierarchical'    => true,
    'label'           => 'Baths',
    'rewrite'         => array('slug' => 'baths' ),
    )
  );
}

ОБНОВИТЬ

Так что, кажется, я пропустил часть вопроса с переключателем . К сожалению , WordPress не делает это легко , но вы можете сделать это произойдет с помощью буферизации вывода PHP (через ob_start()и ob_get_clean()функции.) Просто найти крюк перед METABOX выводится ( 'add_meta_boxes') и крючок после его выхода ( 'dbx_post_sidebar') , а затем искать захваченный HTML для 'checkbox'и заменить 'radio'на, отобразить его на экране, и все готово! Код следует:

add_action('add_meta_boxes','mysite_add_meta_boxes',10,2);
function mysite_add_meta_boxes($post_type, $post) {
  ob_start();
}
add_action('dbx_post_sidebar','mysite_dbx_post_sidebar');
function mysite_dbx_post_sidebar() {
  $html = ob_get_clean();
  $html = str_replace('"checkbox"','"radio"',$html);
  echo $html;
}

И доказательства:

Снимок экрана, показывающий таксономии с использованием переключателей
(источник: mikeschinkel.com )

MikeSchinkel
источник
1
«Смотри, мама, родительского поля нет!» Майк, ты меня рассмешил! : D
Михал Мау
@maugly - это мой по умолчанию. : D
MikeSchinkel
@haha - Рад, что тебе нравится. :)
MikeSchinkel
Фантастика, как всегда.
Трэвис Норткатт
1
@ tnorthcutt - Честно говоря, я бы порекомендовал написать свой собственный метабокс. Это то, что я сделал, и это действительно не сложно для этого. Просто сделайте просмотр источника и сопоставьте его <input>с <select>именами, и вам даже не нужно будет ничего делать для захвата таксономии; WordPress сделает это за вас. ИЛИ, используйте настраиваемое поле и обходите таксономию, которая может быть излишней для этого.
MikeSchinkel
2

или, если вы ленивы, можете использовать этот плагин: Single Value Taxonomy UI

(Я бы предпочел добавить это как комментарий к ответу Майка, так как в основном он делает то же самое - но я пока не могу добавлять комментарии)

чел
источник
К сожалению, через 2 года обновлений не будет :( Это действительно то, что WP должен добавить базовую поддержку, поскольку многие люди будут использовать таксономии с одним условием для каждого объекта, если это будет возможным (т. Е. Использовать таксономии, а не мета, когда важна производительность запросов).
Джеркларк