Sınıflandırma Koşullarını Kaydetme


16

Birisinin çabucak cevaplayabileceğini umduğum ilginç bir sorunum var.

"Benim METABOX KODU" (aşağıdaki liste) dayalı doğru oluşturduğum "event_types" taksonomisi içinde tüm terimlerimin bir açılan listesini görüntüleyen kendi meta kutusunu oluşturduk.

Bir sorunla karşılaştığımda, açılır menüden farklı bir terim seçildiğinde ve gönderi güncellendiğinde bir gönderiyle ilişkili terimi KAYDETİYOR / GÜNCELLEŞTİRİYOR.

Çeşitli kod bitleri ile uğraştıktan sonra, MANUALLY [virgülle ayrılmış] terim (ler) i dizi alanına girerek aradığım sonuçları alıyorum anladım.

Örneğin, yazı kaydedilirken bir işlev bu kodu çağırmak için

wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);

sonra benim yazı UPDATE OLACAK ve terim görüyorum gibi term_ID 5 & 7 ile ilişkilendirmek. Sorun, bu benim fonksiyonlar.php dosyasına sabit kodlanmış ve kullanıcı tarafından seçilen bir açılan değere dayalı değil (not: Aslında sadece bir kimlik geçmek çalışıyorum ama aşağıda açıklandığı gibi test için iki yaptım).

Ayrıca metabox dosyama aşağıdaki kodu eklerseniz o zaman atanan terim kimlikleri listesini yankılayabildiğini ancak son öğenin virgül olduğunu anlayabildim.

<?php $event_types = wp_get_object_terms($post->ID, 'event_types'); 
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>

Yani ... Görünüşe göre sorunumun% 85'i çözüldü. Sorunumun kalan% 15'i şu şekilde kalıyor:

  1. Bir gönderi oluşturduğumda / güncellediğimde sınıflandırma açılır listemden seçilen YENİ DEĞER'in diziye aktarılması için function.php dosya koduma (aşağıda listelenmiştir) ne eklemem gerekir?

  2. Her ne kadar bu örnekte bir yazı ile sadece bir sınıflandırma ilişkilendirilebilir sağlamak için arıyorum, ancak ben diziye birden fazla değer geçirmek için gerektiren bir onay kutusu listesi oluşturmak istiyorum başka durumlar vardır. Bu nedenle, diziye virgülle ayrılmış bir terim kimlikleri listesi geçirilmesi için ne değiştirmem gerekir? Cevabınız yukarıda listelenen örnek kodun bir kısmını veya bir kısmını kimlikleri yankıladığım yerde kullanmayı içeriyorsa, yazdırılan son kimliğin sonunda virgül olmadığından nasıl emin olabilirim? (Bunu yapmanın farklı / daha iyi bir yolu var mı? Bir filtre eklemeyle ilgili olabilecek ipuçları gördüm ama bunun nasıl yapıldığından emin değilim ...)

Şimdiden çok teşekkür ederim - aşağıda her dosyada kullandığım kod aşağıdadır.

FONKSİYONLARIMDA KOD.PHP DOSYASI

function save_event_taxonomy_terms($meta, $post_id) {
        $event_types = wp_get_object_terms($post->ID, 'event_types'); 
        wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
    }

METABOX KODUM

<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
    <?php 
    $names = wp_get_object_terms($post->ID, 'event_types'); 
    $event_types = get_terms('event_types', 'hide_empty=0'); 
    ?>
    <option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($event_types as $event_type) {
        if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug)) 
        echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>\n"; 
        else
        echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>\n"; 
    }
    ?>
</select>

Yanıtlar:


6

Dimas bana yardımcı olduktan sonra bu sorunun cevabını göndereceğimi düşündüm.

Onun WPAlchemey Sınıfı kullanarak ben böyle bir save_action var ekledi (tabii ki özel sınıflandırma olabilir ne olursa olsun değiştirebilirsiniz "kategori" için sınıflandırma kullanıyorum unutmayın):

'save_action'   => 'save_taxonomy_terms',

Sonra bunun için aşağıdaki işlevi aşağıdaki gibi ekleyin:

function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}

Sınıflandırmaların açılır listesini gösteren bir meta kutu kodum şöyle:

<label>Event Category:</label>
    <?php $terms = get_terms('category', 'hide_empty=0'); ?>
    <?php $mb->the_field('my_terms'); ?>
    <select name="<?php $mb->the_name(); ?>">
    <option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($terms as $term): ?>
    <option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
    <?php endforeach; ?>
    </select>
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.