我创建了一个自定义的帖子类型(称为赞助者),并连接了一个额外的分类法,称为“类型”。
一切基本上都很完美,但我非常希望我的分类法“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>";
}
}
}
但正如我所说,没有一个是有效的。
如有任何帮助或建议,将不胜感激。
真诚的感谢-梅斯蒂卡
最合适的回答,由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\' );