Змінення зовнішнього вигляду спеціальних входів таксономії


14

Я працюю над сайтом, який використовуватиме декілька власних таксономій (для користувацьких типів публікацій). Я вирішив зробити деякі таксономії ієрархічними, оскільки метод введення значень (прапорці) є більш бажаним для цього сайту, ніж введення у вільну форму неієрархічних таксономій. Однак, що мені дуже хотілося б - це можливість використовувати входи радіо кнопок замість прапорців. Крім того, я хотів би видалити спадне меню, яке використовується для вибору батьківського елемента в систематиці. скріншот

Я йду про це неправильно? Чи варто починати з неієрархічних таксономій та змінювати методи введення для них? Я повністю відкритий для введення інформації і з радістю відповім на будь-які запитання або надам додаткову інформацію, якщо зможу.


+1 Добре запитання. Це також було б добре для проекту, над яким я теж працюю. Крім того, нехай користувацька таксономія буде випадаючим меню замість списку "категорій".
Зак

Так, також було б чудово спадання.
Травіс Нортчетт


Замість того, щоб намагатися змінити існуючий метабокс, те, що ви можете задуматися, - це видалити метабокс за замовчуванням для даної таксономії, а потім зареєструвати власну для виклику спеціальної функції, що відображає терміни в радіогрупі, і це буде пов'язане з два посилання, надані вище maugly.
t31о

Відповіді:


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()функції.) Просто знайдіть гачок до виведення метабокса ( '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

або, якщо ви ліниві, можете використовувати цей плагін: Інтерфейс однозначного таксономії

(Я б швидше додав це як коментар до відповіді Майка, оскільки це здебільшого робить те саме, але я поки не можу додавати коментарі)


На жаль, оновлення за 2 роки на жаль :( Це дійсно щось, що WP повинно додати основну підтримку, оскільки багато людей використовуватимуть таксономії на один термін на об'єкт, якби це був варіант (тобто використовувати таксономії, а не мета, коли важливість виконання запиту).
jerclarke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.