Zaten kayıtlı olan bir sınıflandırma nasıl değiştirilir?


18

Bugün, üçüncü taraf bir eklenti tarafından zaten kaydedilmiş olan özel bir sınıflandırma konusundaki argümanları değiştirmem gerekiyordu . Özellikle show_admin_columnargümanı ayarlamak ve sadece sınıflandırma sülük değil slug truedeğiştirmek istedim rewrite. Bu durumda, "Kişiler Kategorisi" özel sınıflandırmasına sahip bir "Kişiler" gönderi türüdür.

Bunun daha önce sorulmamasına şaşırdım, işte bir soru ve cevap.


Sıkışan herkes için sadece bir yan not, sonucu kontrol etmeden önce kalıcı bağlantıları yıkamayı unutmayın.
un.pez.vivo

Yanıtlar:


22

register_taxonomy()iş için bir araçtır. Kodeks'den:

Bu işlev bir sınıflandırma ekler veya üzerine bir sınıflandırma ekler.

Bir seçenek kopyalamak register_taxonomy() $argsve değiştirmek olabilir. Ancak bu, orijinal register_taxonomy()kodda gelecekte yapılacak değişikliklerin üzerine yazılacağı anlamına gelir.

Bu nedenle, en azından bu durumda, orijinal argümanları almak, değiştirmek istediklerimi değiştirmek ve daha sonra sınıflandırmayı yeniden kaydetmek tercih edilir. Bu çözüm için ilham, bu özel mesaj türleri hakkında benzer bir sorunun cevabında @Otto'ya gider .

Kullanımı peopleözel yazı alanı ve people_categoryörnekten sınıflandırma, bu yapacağım:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Yukarıda üçüncü register_taxonomy()argüman beklenen dizi türünü tahmin unutmayın. Bir veya ile başa çıkabilen register_taxonomy()kullanımlar olarak wp_parse_args()bu kesinlikle gerekli değildir . Dedi ki, 'ın bir şekilde sunulması gerekiyordu bu bana doğru geliyor, böylece Kodeksi'ne uygun.objectarrayregister_taxonomy()$argsarray


Düz bir taksonomiyi hiyerarşik bir taksonomiye değiştirmek için bunu yapmaya çalışıyorum. Basitçe hiyerarşik özelliği true olarak değiştiriyorum. Bunu yaparak, gönderi düzenleme ekranının sağındaki sınıflandırma için iki meta kutuya neden oluyor ve aslında sınıflandırma ekleyemiyorum ...
Joel Worsham

Üzerine yazabilmek 'people_category'için orijinal sınıflandırma ile aynı bilgi (ör. ) Kullandığınızdan emin olun .
mrwweb

1
Genius! Saf dahi! Mükemmel çalıştı!
DaveyJake

1
Bu çözüm ile ilgili bir sorun buldum: capabilitiesparametre capyeni kayıtlı taksonomiye geçirilmeyecek şekilde dahili olarak saklanır . Benzer bir soruya
cevabımı

1
Bu harika, özel bir sınıflandırmaya hiyerarşik URL'ler eklemek için kullandım.
Brian Peat
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.