wp_dropdown_categories no tipo de postagem personalizada com taxonomia personalizada

4

Eu tenho um tipo de postagem personalizado com sua própria taxonomia, basicamente 'locais de exibição' é o tipo de postagem e a região do local é a taxonomia.

Vendo como um local não pode existir em várias regiões, removi a caixa de metta padrão e adicionei a minha como dropdown usando wp_dropdown_categories() . Os itens da taxonomia estão sendo exibidos e aparecem como eu gostaria, mas eles não estão sendo enviados e a lista suspensa não retém a seleção após o envio. Eu tentei tanto quanto eu sou capaz de olhar para os vários atributos do metabox original e tentei aplicá-los ao drop down, mas até agora eu não tive nenhuma alegria.

Eu observei alguns vários posts no WPSE e não foram capazes de descobrir onde estou indo errado.

Alguém pode elaborar quais os meus próximos passos / quais partes estão faltando?

<?php
// remove the default taxononomy
add_action( 'admin_menu', 'tr_remove_meta_box');  
function tr_remove_meta_box(){  
   remove_meta_box('venue-regiondiv', 'venue', 'normal');  
} 

//Add new taxonomy meta box  
 add_action( 'add_meta_boxes', 'tr_add_meta_box');  

 function tr_add_meta_box() {  
     add_meta_box( 'venue-region-dropdowndiv', 'What region is this venue in?','tr_venuesTaxonomydropdown_metabox','venue' ,'side','core');  
 }  

//Callback to set up the metabox
function tr_venuesTaxonomydropdown_metabox( $post ) {
    $taxonomy = 'venue-region';

    //The name of the form  
    $name = 'tax_input[' . $taxonomy . '][]';  
    $id = $taxonomy.'dropdown';
    //Get current and popular terms
    $postterms = get_the_terms( $post->ID,$taxonomy );
    $current = ($postterms ? array_pop($postterms) : false);
    $current = ($current ? $current->term_id : 0);
    ?>

    <div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv">
        <!-- Display taxonomy terms -->
        <div id="<?php echo $taxonomy; ?>-all" class="tabs-panel">
            <?php $args = array(
                    'show_option_all'    => 'Choose a region',
                    'show_option_none'   => '',
                    'orderby'            => 'ID', 
                    'order'              => 'ASC',
                    'show_count'         => 0,
                    'hide_empty'         => 0, 
                    'child_of'           => 0,
                    'exclude'            => '',
                    'echo'               => 1,
                    'selected'           => 1,
                    'hierarchical'       => 1, 
                    'name'               => $name,
                    'id'                 => $id,
                    'class'              => 'form-no-clear',
                    'depth'              => 0,
                    'tab_index'          => 0,
                    'taxonomy'           => $taxonomy,
                    'hide_if_empty'      => true
            ); ?>

          <?php wp_dropdown_categories($args); ?>
        </div>
    </div>
    <?php
}
    
por orionrush 25.10.2013 / 16:42

2 respostas

2

obter ID do post

    $post_id=get_the_ID();

obtenha a região selecionada

    $terms = wp_get_post_terms( $post_id, $taxonomy );

    $selected_id='';

    if(isset($terms[0]->term_id)){

        $selected_id=$terms[0]->term_id;
    }

criar lista suspensa hierárquica

wp_dropdown_categories( array(
    'show_option_all'    => 'Choose a region',
    'show_option_none'   => '',
    'orderby'            => 'ID', 
    'order'              => 'ASC',
    'show_count'         => 0,
    'hide_empty'         => 0, 
    'child_of'           => 0,
    'exclude'            => '',
    'echo'               => 1,
    'selected'           => $selected_id,
    'hierarchical'       => 1, 
    'name'               => 'tax_input['.$taxonomy.'][]',     // important
    'id'                 => $id,
    'class'              => 'form-no-clear',
    'depth'              => 0,
    'tab_index'          => 0,
    'taxonomy'           => $taxonomy,
    'hide_if_empty'      => true
) );
    
por RafaSashi 06.10.2016 / 15:03
0

Usando a função wp_dropdown_categories() , você pode usar um parâmetro chamado selected , ao qual você atribui a categoria selecionada IDENTIDADE. Você também deve padronizar o nome do seu select para que seja mais fácil salvar:

$selected_id = get_post_meta( $post->ID, 'selected_tax', true );

wp_dropdown_categories( array(
    'show_option_all'    => 'Choose a region',
    'show_option_none'   => '',
    'orderby'            => 'ID', 
    'order'              => 'ASC',
    'show_count'         => 0,
    'hide_empty'         => 0, 
    'child_of'           => 0,
    'exclude'            => '',
    'echo'               => 1,
    'selected'           => $selected_id,
    'hierarchical'       => 1, 
    'name'               => 'selected_tax',
    'id'                 => $id,
    'class'              => 'form-no-clear',
    'depth'              => 0,
    'tab_index'          => 0,
    'taxonomy'           => $taxonomy,
    'hide_if_empty'      => true
) );

Você precisa salvar o postmeta e recuperar o postmeta (via get_post_meta() ). Parece que no seu exemplo você está obtendo o primeiro termo que nem sempre é o termo selecionado. Em seguida, você atribui o $selected_id ao índice selected em nossos argumentos.

    
por Howdy_McGee 03.02.2016 / 16:45