Tiết kiệm điều khoản phân loại


16

Tôi có một vấn đề thú vị mà tôi hy vọng ai đó có thể nhanh chóng trả lời.

Tôi đã tạo metabox của riêng mình, dựa trên "MÃ METABOX CỦA TÔI" (danh sách bên dưới) đang hiển thị chính xác danh sách thả xuống của tất cả các thuật ngữ của tôi trong phân loại "event_types" mà tôi đã tạo.

Trường hợp tôi gặp phải một vấn đề là có thể TIẾT KIỆM / CẬP NHẬT thuật ngữ liên quan đến bài đăng khi một thuật ngữ khác được chọn từ danh sách thả xuống và bài đăng được cập nhật.

Sau khi mày mò xung quanh với các bit mã khác nhau, tôi có thể nhận ra rằng bằng cách nhập MAN_ALLY số [ID) [được phân tách bằng dấu phẩy] vào vùng mảng tôi đang nhận được kết quả mà tôi đang tìm kiếm.

Ví dụ: nếu lưu bài đăng, một chức năng đã gọi mã này

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

sau đó bài đăng của tôi S UPD CẬP NHẬT và liên kết thuật ngữ_ID 5 & 7 với nó như bạn có thể thấy tôi đang truyền trong mảng. Vấn đề là điều này được mã hóa cứng vào tệp tin.php của tôi và không dựa trên giá trị thả xuống do người dùng chọn (lưu ý: Tôi thực sự chỉ cố gắng vượt qua một ID nhưng tôi đã làm hai để kiểm tra như được giải thích bên dưới).

Tôi cũng đã có thể nhận ra rằng nếu tôi thêm đoạn mã sau vào tệp metabox của mình thì tôi có thể lặp lại danh sách ID thuật ngữ được gán nhưng mục cuối cùng có dấu phẩy.

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

Vì vậy, có vẻ như tôi đã giải quyết được 85% vấn đề của mình. 15% còn lại của vấn đề của tôi vẫn như sau:

  1. Tôi cần thêm gì vào mã tệp tin.php. (Được liệt kê bên dưới) để khi tôi tạo / cập nhật bài đăng, GIÁ TRỊ MỚI được chọn từ danh sách thả xuống phân loại của tôi được chuyển vào mảng?

  2. Mặc dù trong ví dụ này tôi đang tìm cách đảm bảo rằng chỉ có một phân loại SINGLE có thể được liên kết với một bài đăng, có những tình huống khác mà tôi muốn tạo một danh sách hộp kiểm yêu cầu tôi chuyển nhiều hơn một giá trị vào mảng. Như vậy, tôi cần thay đổi gì để danh sách ID thuật ngữ được phân tách bằng dấu phẩy được truyền vào mảng? Nếu câu trả lời của bạn liên quan đến việc sử dụng một số hoặc một phần mã ví dụ mà tôi đã liệt kê ở trên nơi tôi lặp lại ID thì làm cách nào để đảm bảo ID cuối cùng được in không có dấu phẩy ở cuối? (Có cách nào khác / tốt hơn để làm không? Tôi đã thấy các gợi ý có thể liên quan đến việc thêm bộ lọc nhưng tôi không chắc cách này được thực hiện ...)

Cảm ơn các bạn rất nhiều trước - dưới đây là mã tôi hiện đang sử dụng trong mỗi tệp.

MÃ SỐ TRONG CHỨC NĂNG CỦA TÔI.PHP FILE

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

MÃ METABOX CỦA TÔI

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

Câu trả lời:


6

Tôi hình dung tôi sẽ đăng câu trả lời cho điều này sau khi Dimas có thể hỗ trợ tôi.

Bằng cách sử dụng Lớp WPAlooley của mình, tôi đã thêm một var save_action giống như thế này (lưu ý rằng tôi đang sử dụng phân loại cho "danh mục", tất nhiên bạn có thể thay đổi thành bất kỳ phân loại tùy chỉnh nào của bạn):

'save_action'   => 'save_taxonomy_terms',

Sau đó tôi thêm chức năng sau cho việc này như sau:

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

Mã metabox của tôi hiển thị danh sách phân loại thả xuống trông như thế này:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.