Salvando Termos de Taxonomia

14

Eu tenho um problema interessante que espero que alguém possa responder rapidamente.

Eu criei meu próprio metabox que, baseado em "MY METABOX CODE" (lista abaixo) está exibindo corretamente uma lista suspensa de todos os meus termos dentro da taxonomia "event_types" que criei.

Quando me deparo com um problema, posso SALVAR / ATUALIZAR o termo associado a uma postagem quando um termo diferente é selecionado no menu suspenso e a postagem é atualizada.

Depois de mexer em vários bits de código, descobri que, inserindo MANUALMENTE os números term_ID [separados por vírgulas] na área da matriz, estou obtendo os resultados que estou procurando.

Por exemplo, se ao salvar o post uma função fosse chamar esse código

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

então meu post ATUALIZARÁ e associará o term_ID 5 & 7 para que, como você pode ver, eu estou passando na matriz. O problema é que isso é codificado no meu arquivo functions.php e não baseado em um valor dropdown selecionado pelo usuário (note: na verdade, estou apenas tentando passar um ID, mas fiz dois para testar conforme explicado abaixo).

Também consegui descobrir que, se adicionar o seguinte código ao meu arquivo metabox, posso fazer eco de uma lista de IDs de termo atribuídos, mas o último item tem uma vírgula.

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

Então ... parece que tenho 85% do meu problema resolvido. Os restantes 15% do meu problema permanecem da seguinte forma:

  1. O que preciso adicionar ao código do meu arquivo functions.php (listado abaixo) para que, quando eu criar / atualizar uma postagem, o NEW VALUE selecionado na lista suspensa de taxonomia seja passado para a matriz?

  2. Embora neste exemplo eu esteja procurando garantir que apenas uma taxonomia SINGLE possa ser associada a uma postagem, há outras situações em que eu gostaria de criar uma lista de opções que exigiria que eu passasse mais de um valor na matriz. Como tal, o que eu preciso mudar para que uma lista separada por vírgula de IDs de termo seja passada para a matriz? Se sua resposta envolve o uso de parte ou de parte do código de exemplo listado acima, onde eu faço o eco dos IDs, como garantir que o último ID que é impresso não tenha uma vírgula no final? (Existe uma maneira diferente / melhor para fazer isso? Eu vi dicas que podem estar relacionadas com a adição de um filtro, mas não tenho certeza de como isso é feito ...)

Agradeço a vocês antecipadamente - abaixo está o código que estou usando atualmente em cada arquivo.

CODIFICAR NAS MINHAS FUNÇÕES.FICHEIROPHP

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

MEU 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>
    
por NetConstructor.com 14.09.2010 / 10:08

1 resposta

6

Eu imaginei que iria postar a resposta para isso depois que Dimas pudesse me ajudar.

Utilizando sua classe WPAlchemey Eu adicionei um save_action var que se parecia com isso (note que estou usando a taxonomia para "category", que é claro que você pode mudar para qualquer taxonomia personalizada):

'save_action'   => 'save_taxonomy_terms',

Em seguida, adiciono a seguinte função para isso da seguinte maneira:

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

Um código metabólico que exibe a lista suspensa de taxonomias tem esta aparência:

<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>
    
por NetConstructor.com 17.09.2010 / 09:03