如何将默认项添加到自定义分类中?


10

WordPress默认分类法(类别)默认情况下具有未分类项目。如何将默认项添加到新的自定义分类中?

functions.php:

// === CUSTOM TAXONOMIES === //
function my_custom_taxonomies() {
    register_taxonomy(
        'block',        // internal name = machine-readable taxonomy name
        'static_content',       // object type = post, page, link, or custom post-type
        array(
            'hierarchical' => true,
            'labels' => array(
                'name' => __( 'Blocks' ),
                'singular_name' => __( 'Block' ),
                'add_new_item' => 'Add New Block',
                'edit_item' => 'Edit Block',
                'new_item' => 'New Block',
                'search_items' => 'Search Block',
                'not_found' => 'No Block found',
                'not_found_in_trash' => 'No Block found in trash',
            ),
            'query_var' => true,    // enable taxonomy-specific querying
            'rewrite' => array( 'slug' => 'block' ),    // pretty permalinks for your taxonomy?
        )
    );
}
add_action('init', 'my_custom_taxonomies', 0);

编辑:安装主题时,我只想在那里找到分类法项目。它不必自动添加到任何空词中

Answers:


8

在这里看看:

https://web.archive.org/web/20150403012347/http://wordpress.mfields.org/2010/set-default-terms-for-your-custom-taxonomies-in-wordpress-3-0/

基本上,您需要做的是使用save_post钩子检查帖子的术语,并从分类法中添加默认术语(如果为空)。

如果您只想在自定义分类法中设置初始术语,则可以使用wp_insert_term()。将其添加到用于创建自定义分类法的相同功能中,可能最简单。正如t3ios在注释中添加的那样,您应该get_term()先调用,并且仅在返回值为null时才插入该术语(即该术语不存在)。

此示例代码来自食典:http : //codex.wordpress.org/Function_Reference/wp_insert_term

$parent_term = term_exists( 'fruits', 'product' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
  'Apple', // the term 
  'product', // the taxonomy
  array(
    'description'=> 'A yummy apple.', 
    'slug' => 'apple', 
    'parent'=> $parent_term_id
  )
);

@anu我想我并没有很好地解释自己,我只是想在安装主题时在那里使用分类法。如果为空,则没有任何条件。
janoChen

@janoChen -我的答案更新
ANU

@anu太好了,我希望我能再投票给你答案。我编辑了问题。我应该将上面编写的代码放在哪里?
janoChen 2011年

我添加的代码只是一个示例(来自WordPress Codex)-因此您需要根据需要进行修改。最好的添加位置是在该函数的右括号之前。
anu

1
您确定要在该函数中运行插入,它在init上运行,即。每个页面,我不认为您每次要调用页面时都不想运行插入吗?如果已经存在具有该名称的匹配项(我没有看过),则insert函数可能会返回null / false(但是我似乎没有必要)(为什么不调用get_term(s)看看它是否存在,那么然后如果没有插入)。
t31os 2011年

4

默认类别为硬编码wp_insert_post()功能。

因此无法完全复制它,但可以用其他方式处理它。如果尝试在发布过程中未分配任何新的帖子,我会尝试将它们转换为新帖子的帖子状态转换


+1用于链接到帖子状态挂钩,这正是我想要的。
马特

0

使用默认术语插件,您可以执行此操作

register_taxonomy( 'custom-tax', array('post'), array(
    'label'              => 'Custom Tag',
    'public'             => true,
    'show_ui'            => true,
    'default_term'       => 'Some Default Term', // Add this line to your code 
// then activate and deactivate the default term plugin to save the terms you set.
));

默认情况下,提交帖子时,如果没有选中任何术语,它将默认术语保存到帖子中。它适用于分层和非分层分类法。


如果它在创建后的视图上自动选择了指定的术语,那就太好了,这样用户就知道会发生什么。
Garconis

0

我需要用星期几填充“自定义分类法”“天”。遵循以上建议,我想到了这一点,但是我想知道是否有更简洁的编码方式:

 /*************************************** ...Create a Custom Taxonomy for days ******************************/
add_action( 'init', 'build_taxonomies', 0 );  
function build_taxonomies() {  
    register_taxonomy( 
    'days', 
    'schedule',
   array( 'hierarchical' => true, 
    'label' => 'Days',
    'query_var' => true, 
    'show_ui' => false, //removes the menus from admin menu and edit panel  
    'rewrite' => true ) );  

/*---------------------------------------Check to see if the days are created..if not, create them----*/
$parent_term = term_exists( 'days', 'days' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id

wp_insert_term(//this should probably be an array, but I kept getting errors..
        'Monday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'monday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Tuesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'tuesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Wednesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'wednesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Thursday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'thursday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Friday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'friday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Saturday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'saturday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Sunday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'sunday',
        'parent'=> $parent_term_id ));
}
/************ now I add my own meta box for days to get rid of extra controls *************/

add_action('admin_menu', 'add_custom_categories_box');
function add_custom_categories_box() {
 add_meta_box('myrelateddiv', 'Days*', 'ilc_post_related_meta_box', 'schedule', 'normal', 'low', array( 'taxonomy' => 'days' ));
}

function ilc_post_related_meta_box( $post, $box ) {
  $defaults = array('taxonomy' => 'related');
  if ( !isset($box['args']) || !is_array($box['args']) )
  $args = array();
  else
  $args = $box['args'];
  extract( wp_parse_args($args, $defaults), EXTR_SKIP );
  $tax = get_taxonomy($taxonomy);
?>

  <ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear">
<?php
  wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => FALSE ) )
?>
</ul>   
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.