使父类别成为选项组

时间:2014-02-23 作者:Mihi

如何将父类别转换为optgroup?

我想要的演示:http://fiddle.jshell.net/Pp7Ey/show/

目前我有以下代码:

$cat = $_POST[\'cat\'];

$data = array(
    ..
    \'post_category\' => array( $cat )
);

wp_insert_post( $data );

<?php wp_dropdown_categories(\'orderby=name&hide_empty=0&show_count=1&show_option_none=Select one&class=cat&hierarchical=1&name=cat\'); ?>

2 个回复
SO网友:s_ha_dum

你需要extend 这个Walker_CategoryDropdown 沃克。一个非常简单的版本是:

class Top_level_Optgroup extends Walker_CategoryDropdown {

  var $optgroup = false;

  function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {

    $pad = str_repeat(\'&nbsp;\', $depth * 3);

    $cat_name = apply_filters(\'list_cats\', $category->name, $category);
    if (0 == $depth) {
//    $this->optgroup = true;
      $output .= "<optgroup class=\\"level-$depth\\" label=\\"".$cat_name."\\" >";
    } else {
      $output .= "<option class=\\"level-$depth\\" value=\\"".$category->term_id."\\"";
      if ( $category->term_id == $args[\'selected\'] )
              $output .= \' selected="selected"\';
      $output .= \'>\';
      $output .= $pad.$cat_name;
      if ( $args[\'show_count\'] )
              $output .= \'&nbsp;&nbsp;(\'. $category->count .\')\';
      $output .= "</option>";
    }

  }

  function end_el(&$output,$object,$depth) {
    if (0 == $depth/* && true == $this->optgroup*/) {
      $output .= \'</optgroup>\';
    }
  }
}

// usage test
wp_dropdown_categories(
  array(
    \'orderby\' => \'name\',
    \'hide_empty\' => 0,
    \'show_count\' => 1,
    \'show_option_none\' => \'Select one\',
    \'class\' => \'cat\',
    \'hierarchical\' => 1,
    \'name\' => \'cat\',
    \'walker\' => new Top_level_Optgroup
  )
);
假设最上面的——depth === 0-- 类别是optgroup. 这是非常简单的逻辑,但似乎符合您的示例。这个助行器既不寻找也不关心类别子级的存在与否,如果您的实际类别结构比示例中的更复杂,则可能无法正常工作。

SO网友:Steven Jones

您可以使用get_categories() 在这里,您可以更好地控制数据并建立自己的下拉列表。

例如,当您获得类别时(添加您自己的参数):

$categories = get_categories(); 

foreach ($categories as $category) {
    if (0 == $category->parent) {
      // This will be an optgroup
    } else {
      // This will be an option
    }
  }
希望这有帮助。

结束

相关推荐

Completely disable categories

有人知道有一个插件在WP中禁用了类别吗?我的意思是,对于现有用户和新用户,完全自动地从视图中隐藏该功能。特别是:WP admin菜单、帖子列表、它的屏幕选项和过滤器、帖子编辑器和它的屏幕选项、widgets屏幕、writing和permalink设置屏幕我遇到了各种老化的黑客来完成这一部分工作,其中大部分是用来禁用元框的代码和一些用来禁用permalink前缀的插件。我之所以选择这样做,是希望一些网页设计师或开发人员能够掌握整套功能。如果没有,在过去的3-4年中,是否会有新的API使过程变得更简单(我的W