Membuat taksonomi khusus ini yang akan mengontrol tata letak pada posting tunggal, pada dasarnya saya ingin menambahkan dua opsi, Layout 1 dan Layout 2.
// Register Custom Taxonomy
function custom_taxonomy() {
$labels = array(
'name' => _x( 'Layout', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Layout', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Taxonomy', 'text_domain' ),
'all_items' => __( 'All Items', 'text_domain' ),
'parent_item' => __( 'Parent Item', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'new_item_name' => __( 'New Item Name', 'text_domain' ),
'add_new_item' => __( 'Add New Item', 'text_domain' ),
'edit_item' => __( 'Edit Item', 'text_domain' ),
'update_item' => __( 'Update Item', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
'search_items' => __( 'Search Items', 'text_domain' ),
'add_or_remove_items' => __( 'Add or remove items', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from the most used items', 'text_domain' ),
'not_found' => __( 'Not Found', 'text_domain' ),
);
$capabilities = array(
'manage_terms' => 'foobar',
'edit_terms' => 'foobar',
'delete_terms' => 'foobar',
'assign_terms' => 'foobar'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => false,
'show_in_nav_menus' => false,
'show_tagcloud' => false,
'capabilities' => $capabilities,
);
register_taxonomy( 'Layout', array( 'post' ), $args );
}
// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );
Kemampuan diatur ke nilai yang tidak valid untuk menghentikan istilah diedit, tetapi saya tidak bisa membuat wp_insert_term berfungsi.
Menambahkan dua istilah ke taksonomi khusus saya tidak mungkin terlalu sulit, bukan?
Menggunakan ini untuk memasukkan istilah tidak berfungsi, meskipun jika saya mengubah nama taksonomi saya menjadi 'kategori', yaitu WP default berfungsi dengan baik. Apa yang menyebabkannya?
function example_insert_category() {
$parent_term = term_exists( 'layout' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
'Example Category',
'layout',
array(
'description' => 'This is an example category created with wp_insert_term.',
'slug' => 'example-category'
)
);
}
add_action( 'after_setup_theme', 'example_insert_category' );
custom-taxonomy
andy
sumber
sumber
Jawaban:
EDIT 2
Seperti yang dijanjikan, ini adalah kode untuk plugin.
Adalah fakta yang diketahui bahwa taksonomi khusus dan jenis pos khusus harus dimasukkan ke dalam plugin, dan bukan di tema Anda. Saya telah menghapus bagian dari plugin saya.
BAGAIMANA ITU BEKERJA
Taksonomi didaftarkan sebagai normal melalui plugin. Untuk info tentang ini, Anda dapat pergi dan memeriksa
register_taxonomy
. Bagian yang perlu saya soroti dan apa yang relevan dengan pertanyaan ini, adalah bagaimana memasukkan istilah baru.Untuk memasukkan istilah melalui
wp_insert_terms
cepat dan mudah, tetapi kode ini juga bisa melukai waktu pemuatan jika tidak digunakan dengan benar. Idenya adalah menjalankan fungsi itu sekali, dan kemudian tidak pernah lagi, hampir seperti menghapusnya setelah menjalankan pertama.Untuk mencapai ini, Anda akan menghubungkan fungsi Anda
register_activation_hook
. Pengait ini berjalan sekali, saat plugin diaktifkan, itu tidak akan dijalankan kembali di halaman refresh. Satu-satunya waktu akan menyala lagi adalah ketika plugin dinonaktifkan dan diaktifkan kembaliJadi, pertama-tama Anda harus mendaftarkan taksonomi Anda karena Anda tidak dapat menetapkan persyaratan untuk taksonomi yang tidak ada. Setelah taksonomi Anda didaftarkan, Anda dapat memasukkan persyaratan Anda. Ingat, tindakan ini hanya akan dilakukan sekali, dan saat itulah plugin diaktifkan. Jika Anda perlu menambahkan istilah, Anda perlu menonaktifkan plugin dan mengaktifkannya lagi
Anda ingin juga memeriksa dulu apakah ada istilah sebelum mencoba membuat dan menyisipkannya.
Ini adalah kode plugin
EDIT 1
Masalah Anda dengan memasukkan istilah adalah hook Anda.
after_setup_theme
berjalan sebelumnyainit
, artinya Anda mencoba memasukkan istilah ke taksonomi yang belum terdaftar.Saya menyarankan agar Anda memindahkan
wp_insert_term
fungsi Anda ke dalam fungsi init Anda, tepat di bawahregister_taxonomy
Sebaiknya periksa dulu apakah ada istilah (
term_exists
) sebelum memasukkannyaContoh:
Harap dicatat, ini belum diuji
JAWABAN ASLI
Nama taksonomi khusus (dan nama jenis pos kustom) harus mematuhi sekumpulan aturan yang sangat spesifik, jika tidak, Anda akan menemukan jebakan yang tidak ada gunanya.
Berikut ini adalah garis panduan ketika memilih nama untuk taksonomi khusus (dan jenis pos khusus)
Yang berikut ini tidak diperbolehkan dalam nama taksonomi khusus dan nama jenis pos kustom
Huruf kapital atau camelcase
Semua tipe karakter khusus, kecuali garis bawah (
_
)Spasi
Lebih dari 32 karakter untuk taksonomi dan 20 untuk jenis posting
Setiap nama pendiam , dan tolong catatan, ini berlaku untuk setiap kustom konvensi penamaan, bukan hanya nama-nama taksonomi.
Jika ada lebih dari satu kata dalam nama taksonomi, mereka harus dipisahkan oleh garis bawah, bukan tanda hubung (
-
). Saya telah ditantang bahwa tanda hubung adalah cara untuk pergi untuk SEO di URL untuk nama taksonomi. Memang benar, itulah sebabnya ada aturan penulisan ulang untuk menyesuaikan URL Anda. Jangan pernah mengubah nama taksonomi atau nama jenis posting untuk keperluan SEO URLJuga, Anda harus menghapus kemampuan aneh itu. Mungkin juga menimbulkan masalah
Jika ini tidak menyelesaikan masalah Anda, harap tambahkan kode yang Anda gunakan
wp_insert_term
Referensi:
register_taxonomy
register_post_type
sumber
$taxonomy
parameternya tidak dibersihkan sama sekali, jikaquery_var
argumen diatur ketrue
. Sebenarnya cukup sulit dipercaya. Dan jika tidak, akan disanitasi melaluisanitize_title_with_dashes()
, yang akan, nomen es omen, mengganti barang-barang dengan tanda hubung di semua tempat. Yang juga tidak bisa dipercaya, karena tidak boleh digunakan.register_post_type()
.