在定制帖子类型中创建可供选择的“静态”分类吗?

时间:2012-10-18 作者:qwerty

好的,我有一个自定义的帖子类型,叫做Blurbs(翻译的,有点)。我想为Blurbs中的帖子添加一组静态类别(我不希望用户能够创建自定义类别)。我想要两种不同类型的类别;链接和页面摘录。我读了一些书,得出结论,分类法是将这些“类别”添加到帖子类型的方法。

我已经创建了分类法,但我不希望它在菜单中可见。我只想要编辑/发布屏幕上的“类别”框,其中包含两个静态项。

这就是我目前的情况:

$labels = array(
    \'name\' => \'Categories\',
    \'singular_name\' => \'Category\',
    \'search_items\' => \'Search categories\',
    \'all_items\' => \'All categories\',
    \'edit_item\' => \'Change category\',
    \'update_item\' => \'Update category\',
    \'add_new_item\' => \'Create new category\',
    \'new_item_name\' => \'New category name\'
);

register_taxonomy(\'categories\', array(\'blurb\'), array(
    \'hierarchical\' => true,
    \'labels\' => $labels,
    \'show_ui\' => true,
));
通过设置show_uifalse, 它将从两个位置(菜单和链接框)消失。

因此,我需要帮助的两个问题是:

如何将其从菜单中删除

4 个回复
最合适的回答,由SO网友:Mridul Aggarwal 整理而成

成功吧show_ui => false

然后,要在后期编辑屏幕上显示,请手动添加该框

add_action(\'add_meta_boxes\', \'meta_boxes_function\');

function meta_boxes_function() {
     add_meta_box(\'categoriesdiv\', \'categories\', \'post_categories_meta_box\', \'blurb\', \'side\', null, array(\'taxonomy\' => \'categories\'));
}
对每个静态术语使用此代码

if(!term_exists(\'term1\', \'categories\'))
    wp_insert_term(\'term1\', \'categories\');

SO网友:Stephen Harris

有一种比隐藏用户界面更简单(更安全的方法*)的方法(show_ui=false) 以及添加自定义元框以仅显示术语:删除用户管理术语的能力。

如果您删除了用户管理术语的功能,那么您不仅有了一个安全的解决方案,而且用户界面也会自行处理。作为register_taxonomy() 您可以指定用户必须具备的管理/编辑/删除和分配术语的功能。

 register_taxonomy( 
    \'categories\',
    array( \'blurb\' ),
    array( 
      ...
      \'show_ui\' => true,
      \'capabilities\' => array(
        \'manage_terms\' => \'a_capability_the_user_doesnt_have\',
        \'edit_terms\'   => \'a_capability_the_user_doesnt_have\',
        \'delete_terms\' => \'a_capability_the_user_doesnt_have\',
        \'assign_terms\' => \'edit_posts\'
      ),
      ...
    )
 )
对于前三个,您需要将功能设置为用户不具备的功能。事实上,把它留在上面可能就可以了。如果you 仍然希望管理/编辑/删除术语您可以始终使用您拥有的功能,但您的客户可以(他们可以manage_options, 例如?)。这将允许您创建和维护“静态”列表。或者,在进行上述更改之前,您可以简单地这样做。

最后,您需要为assign_terms 用户确实有。默认情况下,它是edit_posts, 所以你可能可以就这么说了。但是,您可能希望创建新功能edit_blurb, 这样您就可以允许用户编辑简介,但不能编辑帖子。

WordPress,然后处理其余部分。由于用户无法管理/编辑/删除术语,管理菜单将消失。此外,编辑blurb页面上的metabox仅显示现有术语,用户无法添加/删除或编辑任何术语。

请记住,隐藏UI并不会删除用户编辑和删除术语的能力,它只是将其隐藏。

SO网友:Macgyver

您应该首先使用菜单进入分类法管理页面,添加要添加的静态值,然后将其从公共消费中删除。

发件人:http://codex.wordpress.org/Function_Reference/register_taxonomy

在分类参数中使用show\\u in\\u nav\\u menus变量,即:

register_taxonomy(\'categories\', array(\'blurb\'), array(
        \'hierarchical\' => true,
        \'labels\' => $labels,
        \'show_ui\' => true,
        \'show_in_nav_menus\' => false,
      ));

SO网友:SLV

此代码仅在需要时(仅在查询所有术语时)运行“wp\\u insert\\u term”,以获得更好的性能

register_taxonomy(
  \'categories\',
  null,
  array(
    \'hierarchical\' => true,
    \'labels\' => array(
      \'name\' => \'Categories\'
    ),
    \'show_admin_column\' => true,
    \'show_ui\' => true,
    \'query_var\' => true,
    \'rewrite\' => array(\'slug\' => \'categories\'),
  )
);

function create_default_taxonomies_values ($terms, $taxonomies, $args) {
  if ($args[\'get\'] != \'all\') return $terms;
  if (empty($taxonomies[0]) || $taxonomies[0] != \'categories\') return $terms;

  // default values here:
  $default_values = array(\'Value 1\', \'Value 2\');

  foreach ($default_values as $value) {
    if (!term_exists($value, \'categories\')) {
      wp_insert_term($value, \'categories\');
      return get_terms($taxonomies, $args);
    }
  }

  return $terms;
}
add_filter(\'get_terms\', \'create_default_taxonomies_values\', 10, 3);

结束

相关推荐

Invalid Taxonomy in template

我已经浏览了这里涉及同样错误的帖子,没有任何运气。我有一个自定义的帖子类型(Staff)和它的自定义分类法。编制员工职位和分配术语很有效,但我想根据分类术语将所有员工分组列出。但是the terms do not come through.模板文件位于此处:http://pastie.org/4372363的(相关部分)功能。php文件位于此处:http://pastie.org/4372367我为什么不能这样做?结果如下所示:<div class=\"content\"> &