Tidak bisakah taksonomi khusus memiliki istilah (siput) yang sama dengan kategori?

8

Saya tahu bahwa tidak mungkin untuk memiliki istilah yang sama (istilah siput) di bawah kategori dan tag, tetapi yang mengejutkan, seperti yang saya sadari hari ini, seperti halnya dengan taksonomi khusus.

Jadi misalnya, jika situs saya memiliki kategori yang disebut Linux (linux)dan saya ingin membuat istilah taksonomi kustom yang disebut 'Linux' juga, itu akan terlihat seperti Linux (linux-2), yaitu siput harus berbeda.

Dan jika saya mencoba untuk mengganti nama siput kembali ke linux, saya mendapatkan kesalahan, "Siput 'linux' sudah digunakan oleh istilah lain" .

Apakah mungkin untuk memiliki istilah yang sama di bawah kategori / tag dan taksonomi kustom (tanpa menimbulkan kekacauan)?


Bagaimana cara mereplikasi masalah ini?

  1. Buat 3-5 posting baru. Buat kategori dan tag baru dan berikan pada posting tersebut (hanya untuk tujuan pengujian).

  2. Simpan pengaturan permalink.

  3. buat dua istilah baru di bawah taksonomi khusus dengan nama yang sama dan siput sebagai kategori dan tag yang Anda buat sebelumnya, dan tetapkan mereka ke posting baru di bawah jenis posting kustom.

  4. Hapus taksonomi khusus.

  5. Coba buat ulang, dan Anda sekarang akan mendapatkan kesalahan: "Siput 'XXX' sudah digunakan oleh istilah lain."

Terkadang itu mereplikasi masalah, terkadang tidak.

Tapi...

Jika Anda dapat membuat kategori (atau tag) dan taksonomi khusus dengan nama dan siput yang sama, lakukan. Lalu, ganti nama salah satunya, dan Anda akan melihat bahwa baik kategori (atau tag) maupun taksonomi ubah nama diubah!

ini aku
sumber
Hmm, ini tidak terjadi pada saya. Bisakah Anda menempelkan kode taksonomi khusus Anda?
Matius Boynes
@MatthewBoynes Oh, seperti inilah tampilannya: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
Saya menggunakan versi WordPress terbaru dan kode Anda, kata demi kata, tidak mengalami kesalahan ini. Inilah yang harus Anda lakukan selanjutnya: (1) Dalam instalasi WordPress 3.6.1 yang bersih, tambahkan saja jenis posting dan kode taksonomi Anda ke tema bersih. Gunakan Twenty Thirteen atau Toolbox atau apalah. Jika berhasil, Anda tahu masalahnya bukan di WP melainkan dengan plugin atau tema Anda. Jika itu terjadi, coba hal yang sama dengan bangunan malam terbaru dari 3,7. Jika berhasil, maka Anda tidak perlu khawatir karena 3.7 peluncuran mungkin minggu depan. Jika masih terjadi, berikan semua kode yang diperlukan untuk mereplikasinya.
Matthew Boynes
@ MatthewBoynes Oke. Saya akan mengujinya dan melihat. Ngomong-ngomong, saya sudah di 3,7 stabil, dirilis sekitar kemarin / hari ini.
its_me
Ah, kau benar, aku entah bagaimana melewatkannya!
Matius Boynes

Jawaban:

9

Ternyata, ini adalah bug di intinya. Saya akan melaporkannya, tetapi ternyata sudah ada, seperti bertahun-tahun, dan berlaku untuk taksonomi khusus. Lihat tiket: # 5809 , # 21950 dan # 22023 .

Jika semua berjalan sesuai rencana, itu akan diperbaiki 3.8 3.9 4.14.2. PEMBARUAN: Ya, sudah diperbaiki !


Sementara itu, berikut ini adalah rencana untuk mengatasi masalah ini - secara otomatis menetapkan sufiks siput khusus untuk semua istilah yang baru dibuat di bawah taksonomi:

/*
 * Set custom slug suffix for terms of a taxonomy
 * 
 * http://wordpress.stackexchange.com/q/42550/10691
 * http://wordpress.stackexchange.com/q/71304/10691
 * http://wordpress.stackexchange.com/q/120096/10691
 * https://github.com/WordPress/WordPress/blob/master/wp-includes/taxonomy.php
 */
add_action( 'created_term', 'aahank_add_suffix_to_term', 10, 3 );
function aahank_add_suffix_to_term( $term_id, $tt_id, $taxonomy ) {
    if( $taxonomy == 'book' ) {

        // e.g. Term name 'PHP' and term slug 'php-books'
        $term = get_term( $term_id, $taxonomy );
        $args = array( 'slug' => $term->slug . '-books' );
        wp_update_term( $term_id, $taxonomy, $args );

    }
}

Ini bukan retrospektif, yaitu siput hanya istilah baru di bawah taksonomi ('buku' dalam kasus kami) dibuat dengan sufiks khusus kami ('-buku').

Untuk menetapkan awalan, ubah baris ini di fungsi:

$args = array( 'slug' => $term->slug . '-books' );

untuk sesuatu seperti ini:

// e.g. Term name 'PHP' and term slug 'books-php'
$args = array( 'slug' => 'books-' . $term->slug );

Dan begitu bug diperbaiki ...

Buang database dan lakukan pencarian regex dan ganti menggunakan editor teks yang tepat seperti Sublime Text atau TextMate (atau seperti ini ).

Mungkin bukan cara terbaik untuk melakukannya, tetapi cukup baik untuk menyelesaikan pekerjaan.

ini aku
sumber