Menyimpan Ketentuan Taksonomi


16

Saya memiliki masalah menarik yang saya harap seseorang dapat dengan cepat menjawab.

Saya telah membuat metabox saya sendiri yang, berdasarkan "MY METABOX CODE" (daftar di bawah) dengan benar menampilkan daftar dropdown semua istilah saya dalam taksonomi "event_types" yang saya buat.

Saat saya mengalami masalah, saya bisa MENYIMPAN / MEMPERBARUI istilah yang terkait dengan pos ketika istilah berbeda dipilih dari dropdown dan posting diperbarui.

Setelah bermain-main dengan berbagai bit kode saya bisa mengetahui bahwa dengan MANUAL memasukkan nomor term_ID [s] [dipisahkan oleh koma] ke dalam area array saya mendapatkan hasil yang saya cari.

Misalnya, jika menyimpan kiriman, fungsi memanggil kode ini

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

kemudian posting saya AKAN MEMPERBARUI dan menghubungkan term_ID 5 & 7 untuk itu yang seperti yang Anda lihat saya lewat dalam array. Masalahnya adalah bahwa ini sulit dikodekan ke dalam file functions.php saya dan tidak didasarkan pada nilai dropdown yang dipilih pengguna (catatan: Saya sebenarnya hanya mencoba untuk melewati satu ID tetapi saya melakukan dua untuk pengujian seperti yang dijelaskan di bawah).

Saya juga bisa mengetahui bahwa jika saya menambahkan kode berikut ke file metabox saya, maka saya bisa mengulang daftar ID istilah yang diberikan tetapi item terakhir memiliki koma.

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

Jadi ... sepertinya saya sudah menyelesaikan 85% masalah saya. Sisa 15% dari masalah saya tetap sebagai berikut:

  1. Apa yang perlu saya tambahkan ke kode file functions.php saya (tercantum di bawah) sehingga ketika saya membuat / memperbarui posting, VALUE BARU yang dipilih dari daftar dropdown taksonomi saya diteruskan ke dalam array?

  2. Meskipun dalam contoh ini saya ingin memastikan bahwa hanya taksonomi TUNGGAL yang dapat dikaitkan dengan sebuah pos, ada situasi lain di mana saya ingin membuat daftar kotak centang yang mengharuskan saya untuk memberikan lebih dari satu nilai ke dalam array. Dengan demikian, apa yang harus saya ubah agar daftar ID istilah yang dipisahkan koma dimasukkan ke dalam array? Jika jawaban Anda melibatkan penggunaan sebagian atau sebagian dari kode contoh yang saya sebutkan di atas di mana saya menggemakan ID maka bagaimana cara memastikan ID terakhir yang dicetak tidak memiliki koma pada akhirnya? (Apakah ada cara berbeda / lebih baik untuk melakukannya? Saya melihat petunjuk yang mungkin terkait dengan menambahkan filter tetapi saya tidak yakin bagaimana ini dilakukan ...)

Terima kasih banyak sebelumnya - di bawah ini adalah kode yang saya gunakan saat ini di setiap file.

KODE DI FILE FUNGSI SAYA.PHP

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);
    }

KODE METABOX SAYA

<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>

Jawaban:


6

Saya pikir saya akan mengirim jawaban untuk ini setelah Dimas dapat membantu saya.

Memanfaatkan Kelas WPAlchemey-nya, saya menambahkan save_action var yang terlihat seperti ini (perhatikan bahwa saya menggunakan taksonomi untuk "kategori" yang tentu saja Anda dapat mengubah ke apa pun taksonomi kustom Anda):

'save_action'   => 'save_taxonomy_terms',

Saya kemudian menambahkan fungsi berikut untuk ini sebagai berikut:

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

Kode metabox saya yang menampilkan daftar taksonomi taksonomi terlihat seperti ini:

<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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.