Tengo un problema interesante que espero que alguien pueda responder rápidamente.
He creado mi propio metabox que, basado en "MI CÓDIGO DE METABOX" (lista a continuación) muestra correctamente una lista desplegable de todos mis términos dentro de la taxonomía "event_types" que creé.
Cuando me encuentro con un problema es poder GUARDAR / ACTUALIZAR el término asociado a una publicación cuando se selecciona un término diferente en el menú desplegable y se actualiza la publicación.
Después de juguetear con varios bits de código, pude darme cuenta de que al ingresar MANUALMENTE el (los) número (s) de term_ID [separados por comas] en el área del arreglo, 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 SE ACTUALIZARÁ y asociará el term_ID 5 & 7 a ella que como puedes ver estoy pasando en la matriz. El problema es que este está codificado de manera rígida en mi archivo functions.php y no se basa en un valor desplegable seleccionado por el usuario (nota: en realidad, solo intento pasar una identificación pero hice dos para las pruebas como se explica a continuación).
También he podido descubrir que si agrego el siguiente código a mi archivo metabox, puedo repetir una lista de ID de término asignadas 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 he resuelto el 85% de mi problema. El 15% restante de mi problema sigue siendo el siguiente:
-
¿Qué debo agregar a mi código de archivo functions.php (que se muestra a continuación) para que al crear / actualizar una publicación, el NUEVO VALOR seleccionado de mi lista desplegable de taxonomía pase a la matriz?
-
Aunque en este ejemplo busco asegurar que solo una taxonomía ÚNICA pueda asociarse con una publicación, hay otras situaciones en las que me gustaría crear una lista de casillas de verificación que requiera que pase más de un valor en 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 involucra el uso de parte o parte del código de ejemplo que enumeré anteriormente donde hago eco de las identificaciones, ¿cómo me aseguro de que la última identificación que se imprime no tenga una coma al final? (¿Hay alguna forma diferente o mejor de hacerlo? Vi sugerencias que podrían estar relacionadas con agregar un filtro, pero no estoy seguro de cómo se hace esto ...)
Muchas gracias de antemano, a continuación se muestra el código que estoy usando actualmente en cada archivo.
CÓDIGO EN MI FUNCIONES.PHP ARCHIVO
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>