Mevcut Kategorinin Çocukları Var mı Kontrol Edin


11

Görüntülediğim mevcut özel sınıflandırma arşiv sayfasının alt kategorileri olup olmadığını söylemeliyim. Çocuklarla çok fazla özel kategorinin olduğu bir durum var ve site sadece satırın sonunda yayın göstermek. Aksi takdirde, bir sonraki adım olan kategoriye bir bağlantı göstermelidir. Bu snippet'i buldum, ancak özel taksonomiler için işe yaramıyor gibi görünüyor.

function category_has_children() {
global $wpdb;   
$term = get_queried_object();
$category_children_check = $wpdb->get_results(" SELECT * FROM wp_term_taxonomy WHERE parent = '$term->term_id' ");
    if ($category_children_check) {
        return true;
    } else {
       return false;
    }
}   

<?php
    if (!category_has_children()) {
        //use whatever loop or template part here to show the posts at the end of the line
   get_template_part('loop', 'index'); 
       }   

    else {
       // show your category index page here
    }
?>

Yanıtlar:


11

Bunu yapmanın daha iyi bir yolu olabilir veya olmayabilir, ama işte böyle yapardım:

$term = get_queried_object();

$children = get_terms( $term->taxonomy, array(
'parent'    => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // uncomment to examine for debugging
if($children) { // get_terms will return false if tax does not exist or term wasn't found.
    // term has children
}

Geçerli sınıflandırma terimi alt öğelere sahipse, get_termsişlev bir dizi döndürür, aksi takdirde döndürür false.

CPT üretimi için kullanılan Özel Post Tip UI eklentisi ile yerel vanilya kurulumumu test etti ve çalışıyor .


Ben print_r ($ children) .... uncommented bir dizi çıktı. Bu nasıl bir if / else olarak dönüştürülebilir? Üzgünüz, hala php için çok yeni
user29489

1
Bunu dikkate almadım: if ($ children) {echo 'Children Here'; } else {echo 'No Children'; }
kullanici29489

@ user29489 Haklısın, cevabımda yeterince net değildim. İleride başvurmak üzere düzenlenmiştir.
montrealist

1
Sadece çocuk olup olmadığını bilmek isteyen ve çocuk terimleri için veri alması gerekmeyenler için, 'field' => 'count'sadece çocuk sayısını saymayı eklemenizi öneririm .
JD

Bu normal yazı kategorileriyle de çalışır mı?
Pete

9

Bunu get_term_children aracılığıyla yapmak için genel bir WP olasılığı da vardır .

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}

1

Terimlerinizi yalnızca çocuğu olan ya da olmayan terimleri göstermek için filtrelemeye çalıştığınızı varsayarsak, childlessparametreyi get_terms()işlevinizde kullanabilirsiniz.

$children = get_terms( 
    'taxonomy' => '$taxonomy_slug',
    'hide_empty' => false,
    'childless' => true
  ) 
);

Bu, alt öğesi olmayan bir dizi terim çıkarır.

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.