wp_dropdown_categories en el tipo de publicación personalizada con taxonomía personalizada

4

Tengo un tipo de publicación personalizado con su propia taxonomía, básicamente 'mostrar lugares' es el tipo de publicación y las regiones de ubicación son la taxonomía.

Al ver cómo un sitio no puede existir en varias regiones, eliminé el cuadro de metta predeterminado y agregué el mío como un menú desplegable con wp_dropdown_categories() . Los elementos de taxonomía se están emitiendo y aparecen como me gustaría, PERO no se enviaron y la lista desplegable no contiene la selección después de enviar. He intentado en la medida en que puedo ver los diversos atributos del metabox original y he intentado aplicarlos al menú desplegable, pero hasta ahora no he tenido ninguna alegría.

He visto algunos varios las publicaciones en WPSE y no he podido haber podido descifrar a dónde voy mal.

¿Alguien puede dar más detalles sobre cuáles deberían ser mis próximos pasos / qué partes faltan?

<?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
}
    
pregunta orionrush 25.10.2013 - 16:42

2 respuestas

2

obtener ID de publicación

    $post_id=get_the_ID();

obtener la región seleccionada

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

    $selected_id='';

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

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

generar un menú desplegable jerárquico

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
) );
    
respondido por el RafaSashi 06.10.2016 - 15:03
0

Utilizando la función wp_dropdown_categories() hay un parámetro que puede usar llamado selected al que asignaría la categoría seleccionada CARNÉ DE IDENTIDAD. También debe estandarizar el nombre de su selección para que sea más fácil de guardar:

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

Necesitas guardar el postmeta y recuperar el postmeta (a través de get_post_meta() ). Parece que en su ejemplo está obteniendo el primer término que puede no ser siempre el término seleccionado. Luego, asigna el $selected_id al índice selected en nuestros argumentos.

    
respondido por el Howdy_McGee 03.02.2016 - 16:45

Lea otras preguntas en las etiquetas