Guardar términos de taxonomía


16

Tengo un problema interesante que espero que alguien pueda responder rápidamente.

He creado mi propio metabox que, basado en "MI CÓDIGO METABOX" (lista a continuación) muestra correctamente una lista desplegable de todos mis términos dentro de la taxonomía "event_types" que creé.

Donde me encuentro con un problema es poder GUARDAR / ACTUALIZAR el término asociado con una publicación cuando se selecciona un término diferente del menú desplegable y la publicación se actualiza.

Después de jugar con varios bits de código, pude descubrir que al ingresar MANUALMENTE el / los número / s de term_ID [separados por comas] en el área de la matriz, obtengo los resultados que estoy buscando.

Por ejemplo, si al guardar la publicación una función llamara a este código

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

entonces mi publicación ACTUALIZARÁ y asociará el term_ID 5 y 7 que, como pueden ver, estoy pasando en la matriz. El problema es que esto está codificado en mi archivo functions.php y no se basa en un valor desplegable seleccionado por el usuario (nota: en realidad solo estoy tratando de pasar una ID pero hice dos para probar como se explica a continuación).

También he podido descubrir que si agrego el siguiente código a mi archivo metabox, puedo hacer eco de una lista de ID de términos asignados, pero el último elemento tiene una coma.

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

Entonces ... parece que tengo el 85% de mi problema resuelto. El 15% restante de mi problema sigue siendo el siguiente:

  1. ¿Qué necesito agregar a mi código de archivo functions.php (enumerado a continuación) para que cuando cree / actualice una publicación, el NUEVO VALOR seleccionado de mi lista desplegable de taxonomía se pase a la matriz?

  2. Aunque en este ejemplo busco asegurarme de que solo una única taxonomía se pueda asociar con una publicación, hay otras situaciones en las que me gustaría crear una lista de casillas de verificación que me obligaría a pasar más de un valor a la matriz. Como tal, ¿qué necesitaría cambiar para que una lista separada por comas de ID de términos se pase a la matriz? Si su respuesta implica el uso de parte o parte del código de ejemplo que mencioné arriba donde hago eco de las ID, ¿cómo me aseguro de que la última ID que se imprime no tenga una coma al final? (¿Hay una forma diferente / mejor de hacerlo? Vi sugerencias que podrían estar relacionadas con la adición de un filtro, pero no estoy seguro de cómo se hace ...)

Muchas gracias de antemano, a continuación se muestra el código que estoy usando actualmente en cada archivo.

CÓDIGO EN MIS FUNCIONES ARCHIVO 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);
    }

MI CÓDIGO METABOX

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

Respuestas:


6

Pensé que publicaría la respuesta a esto después de que Dimas pudiera ayudarme.

Utilizando su clase WPAlchemey, agregué una variable save_action que se veía así (tenga en cuenta que estoy usando la taxonomía para "categoría" que, por supuesto, puede cambiar a cualquiera que sea su taxonomía personalizada):

'save_action'   => 'save_taxonomy_terms',

Luego agrego la siguiente función para esto de la siguiente manera:

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

Un código de mi metabox que muestra la lista desplegable de taxonomías se ve así:

<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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.