Mam ciekawy problem, który mam nadzieję, że ktoś może szybko odpowiedzieć.
Stworzyłem własny metaboks, który w oparciu o „MY CAB METABOX” (lista poniżej) poprawnie wyświetla listę rozwijaną wszystkich moich terminów w ramach stworzonej przeze mnie taksonomii „event_types”.
Gdy napotykam problem, mogę ZAPISZ / AKTUALIZOWAĆ termin związany z postem, gdy z rozwijanego menu zostanie wybrany inny termin i post zostanie zaktualizowany.
Po majstrowaniu przy różnych bitach kodu byłem w stanie dowiedzieć się, że RĘCZNIE wprowadzając numer (-y) term_ID [oddzielone przecinkami] w obszarze tablicy otrzymuję wyniki, których szukam.
Na przykład, jeśli podczas zapisywania postu funkcja miałaby wywołać ten kod
wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);
wtedy mój post BĘDZIE AKTUALIZOWAĆ i powiąż z nim term_ID 5 i 7, które, jak widać, przekazuję w tablicy. Problem polega na tym, że jest on zakodowany na stałe w moim pliku functions.php i nie jest oparty na wartości rozwijanej wybranej przez użytkownika (uwaga: w rzeczywistości próbuję przekazać tylko jeden identyfikator, ale zrobiłem dwa dla testowania, jak wyjaśniono poniżej).
Byłem także w stanie dowiedzieć się, że jeśli dodam następujący kod do mojego pliku metabox, to mogę wyświetlić listę identyfikatorów przypisanych terminów, ale ostatni element ma przecinek.
<?php $event_types = wp_get_object_terms($post->ID, 'event_types');
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>
Więc ... wygląda na to, że rozwiązałem 85% mojego problemu. Pozostałe 15% mojego problemu pozostaje następujące:
Co muszę dodać do kodu pliku functions.php (wymienionego poniżej), aby podczas tworzenia / aktualizacji postu NOWA WARTOŚĆ wybrana z mojej listy rozwijanej systematyki była przekazywana do tablicy?
Chociaż w tym przykładzie staram się upewnić, że ze postem można powiązać tylko POJEDYNCZĄ taksonomię, istnieją inne sytuacje, w których chciałbym utworzyć listę pól wyboru, która wymagałaby przekazania więcej niż jednej wartości do tablicy. W związku z tym, co powinienem zmienić, aby lista identyfikatorów terminów była rozdzielana przecinkami? Jeśli twoja odpowiedź wymaga użycia części lub części przykładowego kodu wymienionego powyżej, w którym echo identyfikatorów, to w jaki sposób mogę upewnić się, że ostatni wydrukowany identyfikator nie ma przecinka na końcu? (Czy istnieje inny / lepszy sposób na zrobienie tego? Widziałem wskazówki, które mogą odnosić się do dodawania filtra, ale nie jestem pewien, jak to się robi ...)
Z góry dziękuję - poniżej znajduje się kod, którego obecnie używam w każdym pliku.
KOD W MOIM PLIKU FUNCTIONS.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);
}
MÓJ KOD 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>