사용자 정의 분류법에 기본 항목을 추가하는 방법은 무엇입니까?


10

워드 프레스 기본 분류법 (카테고리)에는 기본적으로 분류되지 않은 항목이 있습니다. 새로운 맞춤 분류 체계에 기본 항목을 추가하는 방법은 무엇입니까?

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);

편집 : 테마를 설치할 때 분류 항목을 갖고 싶습니다. 빈 항에 자동으로 추가 할 필요는 없습니다 .

답변:


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 인 경우에만 용어를 삽입해야합니다 (즉, 용어가 존재하지 않음).

이 예제 코드는 Codex의 코드입니다. 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 Excellent, 나는 당신의 답변을 더 투표 할 수 있기를 바랍니다. 질문을 편집했습니다. 위에서 작성한 코드를 정확히 어디에 배치해야합니까?
janoChen

내가 추가 한 코드는 예제 일 뿐이며 WordPress 코덱에서 가져온 것이므로 필요에 따라 수정해야합니다. 추가하기 가장 좋은 위치는 함수의 닫는 중괄호 바로 앞에 있습니다.
anu

1
해당 함수에서 인서트를 실행 하시겠습니까? 즉, init에서 실행됩니다. 모든 페이지에서 페이지가 호출 될 때마다 삽입을 실행하고 싶지 않다고 생각합니까? 일치하는 용어가 이미 해당 이름으로 존재하는 경우 insert 함수는 null / false를 반환하지만 어쩌면 조금 불필요하게 보이는 것 같습니다 (get_term을 호출하지 않고 존재하는지 확인하십시오) 그렇지 않으면 삽입하십시오.
t31os

4

기본 범주는 wp_insert_post()기능상 하드 코딩 된 경우입니다 .

따라서 정확하게 복제 할 수는 없지만 다른 방법으로 처리 할 수 ​​있습니다. 새 게시물에 대한 게시물 상태 전환 에 연결하고 게시물 생성 중에 할당되지 않은 기본 용어를 할당하려고합니다.


게시 상태 후크에 연결하는 데 +1이 있습니다. 바로 내가 찾던 것입니다.
Matt

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>   
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.