Bagaimana cara menambahkan item default ke taksonomi khusus?

10

Taksonomi default Wordpress (Kategori) memiliki item Uncategorized secara default. Bagaimana cara menambahkan item default ke taksonomi kustom baru?

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: Saya hanya ingin memiliki item taksonomi di sana ketika tema diinstal. Tidak harus secara otomatis ditambahkan ke istilah kosong apa pun .

janoChen
sumber

Jawaban:

8

Lihat di sini:

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

Pada dasarnya yang perlu Anda lakukan adalah menggunakan kait save_post untuk memeriksa persyaratan untuk posting dan menambahkan istilah default dari taksonomi Anda jika kosong.

Jika Anda hanya ingin menetapkan istilah awal dalam taksonomi khusus Anda, maka Anda dapat menggunakannya wp_insert_term(). Mungkin paling mudah untuk menambahkannya dalam fungsi yang sama yang Anda gunakan untuk membuat taksonomi khusus Anda. Ketika t3ios menambahkan dalam komentar, Anda harus menelepon get_term()dulu, dan hanya memasukkan istilah jika nilai baliknya nol (artinya istilah itu tidak ada).

Contoh kode ini dari 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
sumber
@ anu Saya pikir saya tidak menjelaskan diri saya dengan baik, saya hanya ingin ada taksonomi di sana ketika tema diinstal. Tidak harus istilah apa pun jika kosong.
janoChen
@janoChen - Saya memperbarui jawabannya
anu
@anu Luar Biasa, saya berharap saya bisa memilih jawaban Anda lebih banyak. Saya mengedit pertanyaan. Di mana tepatnya saya harus meletakkan kode yang Anda tulis di atas?
janoChen
Kode yang saya tambahkan hanyalah sebuah contoh (dan itu dari kodeks WordPress) - jadi Anda harus mengubahnya jika perlu. Tempat terbaik untuk menambahkannya adalah tepat sebelum kurung tutup untuk fungsi.
anu
1
Anda yakin ingin menjalankan sisipan di fungsi itu, itu berjalan di init, yaitu. setiap halaman, saya tidak berpikir Anda ingin menjalankan sisipan setiap kali halaman disebut kan? Mungkin fungsi insert mengembalikan null / false jika istilah yang cocok sudah ada dengan nama itu (saya tidak melihat), tetapi semua yang sama yang tampaknya sedikit tidak perlu (mengapa tidak memanggil get_term (s) dan melihat apakah ada, lalu masukkan jika tidak).
t31os
4

Kategori default adalah kasing dalam wp_insert_post()fungsi.

Jadi itu tidak bisa direplikasi persis, tetapi Anda bisa menanganinya dengan cara lain. Saya akan mencoba untuk menghubungkan ke transisi status posting untuk posting baru dan menetapkan istilah standar yang diinginkan jika tidak ada yang diberikan selama pembuatan posting.

Jarang
sumber
+1 untuk menautkan ke kait status pos, itulah yang saya cari.
Matt
0

Menggunakan plugin Istilah Default Anda bisa melakukan ini

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

Secara default ketika posting dikirim, itu akan menyimpan istilah default ke posting jika tidak ada istilah yang diperiksa. Ini berfungsi untuk taksonomi hierarkis dan non hierarkis.

Allan Christian Carlos
sumber
Alangkah baiknya jika secara otomatis memilih istilah yang ditentukan pada tampilan pembuatan posting, sehingga pengguna tahu apa yang akan terjadi.
Garconis
0

Saya perlu mengisi "Hari" Taksonomi Kustom dengan hari dalam seminggu .. Saya tidak ingin klien harus mengacaukan dengan menciptakan hari, atau masuk ke sana dan menghapus hari atau salah mengeja hari. Mengikuti saran di atas saya datang dengan ini, tetapi saya bertanya-tanya apakah ada cara yang lebih ringkas untuk mengkodekannya:

 /*************************************** ...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>   
akhir musim dingin
sumber