自定义分类作为管理中的下拉列表

时间:2011-09-12 作者:Mestika

我创建了一个自定义的帖子类型(称为赞助者),并连接了一个额外的分类法,称为“类型”。

一切基本上都很完美,但我非常希望我的分类法“Type”是一个下拉菜单,而不是通常的“Type和search或create a new”。原因是,我在分类法中创建了六种不同的“类型”,而要创建新“赞助商”的人应该只需要为每个新的赞助商帖子选择这六种类型中的一种。

我试过谷歌提供的一些教程和指南,但没有一个能奏效。

自定义帖子类型和自定义分类由插件“自定义帖子类型UI”创建。

到目前为止,我尝试的是:

add_action(\'restrict_manage_posts\',\'my_restrict_manage_posts\');

        function my_restrict_manage_posts() {
            global $typenow;

            if ($typenow==\'sponsors\'){
                         $args = array(
                             \'show_option_all\' => "Show All Categories",
                             \'taxonomy\'        => \'type\',
                             \'name\'               => \'type\'

                         );
                wp_dropdown_categories($args);
                        }
        }
add_action( \'request\', \'my_request\' );
function my_request($request) {
    if (is_admin() && $GLOBALS[\'PHP_SELF\'] == \'/wp-admin/edit.php\' && isset($request[\'post_type\']) && $request[\'post_type\']==\'sponsors\') {
        $request[\'term\'] = get_term($request[\'type\'],\'type\')->name;

    }
    return $request;
} 
还有这个

add_action( \'restrict_manage_posts\', \'my_restrict_manage_posts\' );
function my_restrict_manage_posts() {

    // only display these taxonomy filters on desired custom post_type listings
    global $typenow;
    if ($typenow == \'sponsors\' || $typenow == \'type\') {

        // create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list
        $filters = array(\'title_sponsor\', \'platin-sponsor\', \'guld-sponsor\', \'diamant-sponsor\');

        foreach ($filters as $tax_slug) {
            // retrieve the taxonomy object
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;
            // retrieve array of term objects per taxonomy
            $terms = get_terms($tax_slug);

            // output html for taxonomy dropdown filter
            echo "<select name=\'$tax_slug\' id=\'$tax_slug\' class=\'postform\'>";
            echo "<option value=\'\'>Show All $tax_name</option>";
            foreach ($terms as $term) {
                // output each select option line, check against the last $_GET to show the current option selected
                echo \'<option value=\'. $term->slug, $_GET[$tax_slug] == $term->slug ? \' selected="selected"\' : \'\',\'>\' . $term->name .\' (\' . $term->count .\')</option>\';
            }
            echo "</select>";
        }
    }
}
但正如我所说,没有一个是有效的。

如有任何帮助或建议,将不胜感激。

真诚的感谢-梅斯蒂卡

1 个回复
最合适的回答,由SO网友:Ján Bočínec 整理而成

这假设您有一个自定义的帖子类型“赞助商”和一个自定义的分类法“类型”。。。

function custom_meta_box() {

    remove_meta_box( \'tagsdiv-types\', \'sponsors\', \'side\' );

    add_meta_box( \'tagsdiv-types\', \'Types\', \'types_meta_box\', \'sponsors\', \'side\' );

}
add_action(\'add_meta_boxes\', \'custom_meta_box\');

/* Prints the taxonomy box content */
function types_meta_box($post) {

    $tax_name = \'types\';
    $taxonomy = get_taxonomy($tax_name);
?>
<div class="tagsdiv" id="<?php echo $tax_name; ?>">
    <div class="jaxtag">
    <?php 
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), \'types_noncename\' );
    $type_IDs = wp_get_object_terms( $post->ID, \'types\', array(\'fields\' => \'ids\') );
    wp_dropdown_categories(\'taxonomy=types&hide_empty=0&orderby=name&name=types&show_option_none=Select type&selected=\'.$type_IDs[0]); ?>
    <p class="howto">Select your type</p>
    </div>
</div>
<?php
}

/* When the post is saved, saves our custom taxonomy */
function types_save_postdata( $post_id ) {
  // verify if this is an auto save routine. 
  // If it is our form has not been submitted, so we dont want to do anything
  if ( ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) || wp_is_post_revision( $post_id ) ) 
      return;

  // verify this came from the our screen and with proper authorization,
  // because save_post can be triggered at other times

  if ( !wp_verify_nonce( $_POST[\'types_noncename\'], plugin_basename( __FILE__ ) ) )
      return;


  // Check permissions
  if ( \'sponsors\' == $_POST[\'post_type\'] ) 
  {
    if ( !current_user_can( \'edit_page\', $post_id ) )
        return;
  }
  else
  {
    if ( !current_user_can( \'edit_post\', $post_id ) )
        return;
  }

  // OK, we\'re authenticated: we need to find and save the data

  $type_ID = $_POST[\'types\'];

  $type = ( $type_ID > 0 ) ? get_term( $type_ID, \'types\' )->slug : NULL;

  wp_set_object_terms(  $post_id , $type, \'types\' );

}
/* Do something with the data entered */
add_action( \'save_post\', \'types_save_postdata\' );

结束

相关推荐

如何更新POST分类(为Custom Taxonomy创建自定义UI)

我有一个分类法,例如作者。我想为创建自定义UI。我认为,将元框与其他post Meta集成在一起,会让用户更轻松。此外,我认为jQuery UI自动完成(多个逗号分隔的值)更合适因此,我需要知道如何“更新\\u post\\u分类法”。我想我需要如果分类法不存在,请创建它,如果post没有分类法术语,请添加它,删除用户未指定的术语,我确定有相应的功能吗?