更改自定义分类输入的外观


14

我正在一个将利用一些自定义分类法(用于自定义帖子类型)的网站上。我选择对某些分类法进行分层,因为与非格式分类法的自由格式输入相比,此网站更希望输入值(复选框)的方法。但是,我真正想要的是能够使用单选按钮输入而不是复选框。另外,我想删除用于在分类法中选择父项的下拉列表。 屏幕截图

我会以错误的方式处理吗?我应该从非分层分类法开始,而是修改那些分类法的输入法吗?我完全愿意提供意见,如果可以的话,我们将很乐意回答任何问题或提供更多信息。


+1好问题。这对于我正在从事的项目也将是很好的。此外,将自定义分类法设为下拉菜单,而不是“类别”列表。
Zack

是的,下拉列表也很好。
特拉维斯·诺斯卡特


您可能想做的是,不尝试修改现有的元框,而是删除给定分类法的默认元框,然后注册自己的框,以调用自定义函数来显示单选组中的术语,这将与上面提供的两个链接。
t31os 2011年

Answers:


13

当然,只需使用CSS和'admin_head'挂钩即可使其消失。我相信这就是您要寻找的?

没有父级的WordPress帖子页面上的分层分类法条目
(来源:mikeschinkel.com

只需将以下内容添加到主题functions.php文件或.php您可能正在编写的插件文件中即可。请注意,我包括一个'init'钩子来定义“主页”帖子类型和“浴室”分类法,以便其他人可以更轻松地遵循该示例。另请注意,如果您的分类法命名为Baths“,则需要将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'),然后在metabox输出之前找到一个钩子('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 2011年

@haha-很高兴您喜欢它。:)
MikeSchinkel 2011年

一如既往的神奇。
Travis Northcutt

1
@tnorthcutt-坦率地说,我建议您编写自己的metabox。那就是我所做的,为此,这并不难。只需查看源代码,匹配项<input><select>名称,您甚至无需执行任何操作即可捕获分类法。WordPress将为您做到这一点。或者,使用自定义字段并绕过分类法,这可能对此过大。
MikeSchinkel

2

或者,如果您很懒,可以使用此插件:Single Value Taxonomy UI

(我会一直增加,而这是小李的答案,因为它主要是做同样的事情评论 - 但我还不能添加注释)


不幸的是,两年内没有更新:(这确实是WP应该增加的核心支持,因为很多人会选择使用每对象一个术语分类法(例如,在查询性能很重要时使用分类法而不是元数据)。
jerclarke '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.