it-swarm-pt.tech

Salvando Termos de Taxonomia

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.

Onde estou encontrando um problema é poder SALVAR/ATUALIZAR o termo associado a uma postagem quando um termo diferente é selecionado na lista suspensa e a postagem é atualizada.

Depois de mexer em vários bits de código, consegui descobrir que, inserindo manualmente o (s) número (s) 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 irá atualizar e associar o term_ID 5 & 7 a ele que, como você pode ver, 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).

Eu também tenho sido capaz de descobrir que, se eu adicionar o seguinte código ao meu arquivo metabox, então eu sou capaz de ecoar uma lista de IDs de termo atribuído, 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 ÚNICA possa ser associada a uma postagem, há outras situações em que gostaria de criar uma lista de opções que exigiria que eu transmitisse mais de um valor para a matriz. Como tal, o que eu preciso mudar para que uma lista separada por vírgulas de IDs de termos seja passada para a matriz? Se a sua resposta envolver 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 ...)

Obrigado pessoal antecipadamente - abaixo está o código que estou usando atualmente em cada arquivo.

CÓDIGO EM MINHAS FUNÇÕES.PHP FILE

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>
15
NetConstructor.com

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

Utilizando sua Classe WPAlchemey, adicionei um save_action var, que se parecia com isso (observe que estou usando a taxonomia para "category", que é claro que você pode alterar para qualquer que seja sua 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 my metabox que exibe a lista suspensa de taxonomias se parece com isso:

<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>
6
NetConstructor.com