Збереження умов таксономії


16

У мене є цікава проблема, на яку я сподіваюся, що хтось може швидко відповісти.

Я створив свій власний метабокс, який на основі "МОЯ МОДАБОКС КОД" (список нижче) правильно відображає випадаючий список усіх моїх термінів в рамках створеної мною таксономії "event_types".

Якщо у мене виникають проблеми, ми можемо Зберегти / ОНОВЛЕННЯ термін, пов’язаний із публікацією, коли в спадному меню вибирається інший термін і оновлюється повідомлення.

Після роздумування з різними бітами коду я зміг зрозуміти, що вручну вводячи в область масиву термін_ID (-ів) [відокремлені комами], я отримую результати, які шукаю.

Наприклад, якщо при збереженні посту функція мала викликати цей код

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

то моя публікація буде ОНОВЛЕНА та пов’язуватимете з нею термін_ID 5 та 7, який, як ви бачите, я проходжу в масиві. Проблема полягає в тому, що це важко закодовано у мій файл function.php і не базується на вибраному користувачем спадному значенні (зверніть увагу: я насправді намагаюся пройти лише один ідентифікатор, але я зробив два для тестування, як пояснено нижче).

Я також зміг зрозуміти, що якщо я додаю наступний код у свій файл метабокса, я можу повторити список призначених ідентифікаторів терміна, але в останньому елементі є кома.

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

Отже ... здається, я вирішив 85% своєї проблеми. Залишилися 15% моєї проблеми залишаються наступними:

  1. Що мені потрібно додати до свого файлу function.php (перерахований нижче), щоб після створення / оновлення допису в масив було передано НОВУ ЗНАЧЕННЯ, вибрану зі списку таксономії?

  2. Хоча в цьому прикладі я прагну переконатися, що з публікацією може бути асоційована лише ЄДИННА таксономія, є й інші ситуації, коли я хотів би створити список прапорців, який вимагав би передати більше масиву в масив. Що потрібно мені змінити, щоб перелік ідентифікаторів термінів, відокремлених комами, передався в масив? Якщо ваша відповідь передбачає використання деякого чи частини коду прикладу, який я перераховував вище, де я повторюю ідентифікатори, то як я можу впевнитись, що останній ідентифікатор, який роздруковується, не має кома в кінці? (Чи є інший / кращий спосіб це зробити? Я побачив підказки, які можуть стосуватися додавання фільтра, але я не впевнений, як це робиться ...)

Заздалегідь дякую, хлопці, нижче - внизу код, який я зараз використовую у кожному файлі.

КОД У МОЇ ФУНКЦІЇ. ФАЙЛ

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

МОЙ МОДАБОКС КОД

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

Відповіді:


6

Я подумав, що відповістиму на це після того, як Дімас зміг мені допомогти.

Використовуючи свій клас WPAlchemey, я додав var var var, який виглядав приблизно так (зауважте, що я використовую таксономію для "категорії", яку, звичайно, ви можете змінити на будь-яку вашу власну систематику):

'save_action'   => 'save_taxonomy_terms',

Потім я додаю для цього наступну функцію:

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

Мій код метабокса, який відображає випадаючий список таксономій, виглядає так:

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.