Özel bir sınıflandırmaya varsayılan bir öğe nasıl eklenir?


10

Wordpress varsayılan sınıflandırması (Kategoriler) varsayılan olarak Kategorize edilmemiş öğeye sahiptir. Yeni bir özel sınıflandırmaya varsayılan bir öğe nasıl eklenir?

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

EDIT: Sadece tema yüklendiğinde sınıflandırma öğe var istiyorum. Boş bir terime otomatik olarak eklenmesi gerekmez .

Yanıtlar:


8

Buraya bir göz atın:

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

Temel olarak yapmanız gereken şey, gönderi koşullarını kontrol etmek için save_post kancasını kullanmak ve boşsa sınıflandırma işleminizden varsayılan terimi eklemektir.

Özel sınıflandırmanızda yalnızca bir başlangıç ​​terimi ayarlamak istiyorsanız kullanabilirsiniz wp_insert_term(). Özel sınıflandırmanızı oluşturmak için kullandığınız işleve eklemek muhtemelen en kolayıdır. T3ios yorumlara ekledikçe, önce aramalı get_term()ve yalnızca dönüş değeri null ise (yani terim mevcut değilse) terimi eklemelisiniz.

Bu örnek kod Kodeks'den alınmıştır: 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 Sanırım kendimi çok iyi açıklamıyordum, sadece tema yüklendiğinde bu sınıflandırma yapmak istedim. Boş olması durumunda herhangi bir terim olması gerekmez.
JanCan

@janoChen - Cevabı güncelledim
anu

@anu Mükemmel, cevabını daha fazla oylayabilseydim. Soruları düzenledim. Yukarıda yazdığınız kodu tam olarak nereye yerleştirmeliyim?
JanCan

Eklediğim kod sadece bir örnektir (ve WordPress kodeksinden) - bu yüzden gerektiği gibi değiştirmeniz gerekir. Eklemek için en iyi yer, işlevin kapanış ayranından hemen önce olurdu.
anu

1
Eklemeyi bu işlevde çalıştırmak istediğinizden emin olun, init üzerinde çalışır, yani. her sayfa, bir sayfa her çağrıldığında eklemek çalıştırmak istediğiniz sanmıyorum? Belki de ekleme işlevi bu adla eşleşen bir terim zaten varsa (nihayet bakmadım) null / false döndürür, ancak biraz gereksiz görünüyor (neden get_term (ler) i çağırmıyor ve var olup olmadığını görmüyorsunuz), değilse yerleştirin).
t31os

4

Varsayılan kategori wp_insert_post()işlevde sabit kodlanmış durumdur .

Bu yüzden tam olarak çoğaltılamaz, ancak başka şekillerde de kullanabilirsiniz. Yeni gönderiler için gönderi durumu geçişine bağlanmaya çalışacağım ve gönderi oluşturma sırasında hiçbiri atanmamışsa istenen varsayılan terimi atayacağım.


Posta durumu kancasına bağlantı için +1, tam da aradığım şey buydu.
Matt

0

Varsayılan Terim eklentisini kullanarak bunu yapabilirsiniz

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

Varsayılan olarak gönderi gönderildiğinde, hiçbir terim kontrol edilmemişse varsayılan terimi gönderiye kaydeder. Hiyerarşik ve hiyerarşik olmayan taksonomiler için çalışır.


Yazı oluşturma görünümünde belirtilen terimi otomatik olarak seçerse iyi olur, böylece kullanıcı ne olacağını bilir.
Garconis

0

Haftanın günleri ile bir Özel Taksonomi "Gün" doldurmak gerekiyordu .. Ben müşteri gün oluşturma ile karışıklık, oraya almak ve gün veya yazım günleri silmek zorunda istemiyordu. Yukarıdaki tavsiyeyi takiben bunu buldum, ancak kodlamanın daha özlü bir yolu olup olmadığını merak ediyorum:

 /*************************************** ...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>   
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.