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


14

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

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


+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 )


1
«Смотри, мама, родительского поля нет!» Майк, ты меня рассмешил! : D
Михал Мау

@maugly - это мой по умолчанию. : D
MikeSchinkel

@haha - Рад, что тебе нравится. :)
MikeSchinkel

Фантастика, как всегда.
Трэвис Норткатт

1
@ tnorthcutt - Честно говоря, я бы порекомендовал написать свой собственный метабокс. Это то, что я сделал, и это действительно не сложно для этого. Просто сделайте просмотр источника и сопоставьте его <input>с <select>именами, и вам даже не нужно будет ничего делать для захвата таксономии; WordPress сделает это за вас. ИЛИ, используйте настраиваемое поле и обходите таксономию, которая может быть излишней для этого.
MikeSchinkel

2

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

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


К сожалению, через 2 года обновлений не будет :( Это действительно то, что WP должен добавить базовую поддержку, поскольку многие люди будут использовать таксономии с одним условием для каждого объекта, если это будет возможным (т. Е. Использовать таксономии, а не мета, когда важна производительность запросов).
Джеркларк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.