web-dev-qa-db-fra.com

Afficher la taxonomie personnalisée sous forme de liste déroulante

Je souhaite afficher la liste des taxonomies personnalisées sous forme de liste déroulante.

J'ai trouvé la solution ici, la réponse de @alexufo

Afficher une taxonomie personnalisée sous forme de liste déroulante sur la page de modification des articles

Mais le problème, c’est que lorsque je publie le message avec la taxonomie sélectionnée, il en crée automatiquement une autre.

Je ne peux pas commenter sa réponse car je n'ai pas 50 ans de réputation.

voici mon code

function realty_type() {
    $args = array(
        'show_ui'                    => true,
        'meta_box_cb'                => 'drop_cat',
    );
    register_taxonomy( 'realty_type', array( 'my-CPT' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'realty_type', 0 );


    function drop_cat( $post, $box ) {
    $defaults = array('taxonomy' => 'category');
    if ( !isset($box['args']) || !is_array($box['args']) )
        $args = array();
    else
        $args = $box['args'];
    extract( wp_parse_args($args, $defaults), EXTR_SKIP );
    $tax = get_taxonomy($taxonomy);
    ?>
    <div id="taxonomy-<?php echo $taxonomy; ?>" class="acf-taxonomy-field categorydiv">

            <?php 
            $name = ( $taxonomy == 'category' ) ? 'post_category' : 'tax_input[' . $taxonomy . ']';
            echo "<input type='hidden' name='{$name}[]' value='0' />"; // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks.
            ?>
            <? $term_obj = wp_get_object_terms($post->ID, $taxonomy ); //_log($term_obj[0]->term_id)?>
            <ul id="<?php echo $taxonomy; ?>checklist" data-wp-lists="list:<?php echo $taxonomy?>" class="categorychecklist form-no-clear">
                <?php //wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy) ) ?>
            </ul>

            <?php wp_dropdown_categories( array( 'taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => "{$name}[]", 'selected' => $term_obj[0]->term_id, 'orderby' => 'name', 'hierarchical' => 0, 'show_option_none' => '&mdash;' ) ); ?>

    </div>
    <?php
    }
1
Mais_Cule

Finalement, j'ai trouvé la solution après quelques essais et erreurs.

Dans les arguments d'enregistrement de taxonomie, il me suffisait de définir 'hierarchical' => true pour qu'il cesse d'incrémenter la taxonomie et continue d'ajouter l'ajout de taxonomie automatiquement.

Je ne suis pas sûr de savoir pourquoi cela causait le problème après avoir parcouru les documents. Si quelqu'un connaît la raison, veuillez expliquer.

function realty_type() {

    $args = array(
        'show_ui'                    => true,
        'meta_box_cb'                => 'drop_cat',
        'hierarchical' => true
    );

    register_taxonomy( 'realty_type', array( 'YOUR_POST_TYPE' ), $args );    
    }

    // Hook into the 'init' action
    add_action( 'init', 'realty_type', 0 );
0
Mais_Cule

Voici la solution la plus simple que j'utilise pour afficher une taxonomie personnalisée sous forme de liste déroulante plutôt que de cases à cocher.

1/Utilisez le plugin WordPress 'ACF' de tiers pour créer le type de champ 'Relationnel' de la taxonomie et affichez-le sous forme de liste déroulante, comme indiqué dans la capture d'écran ci-dessous.

https://wordpress.org/plugins/advanced-custom-fields/

 enter image description here 

 enter image description here 

Pour afficher la taxonomie sélectionnée, vous pouvez vous référer à la documentation d'ACF pour le type de champ de taxonomie relationnelle.

https://www.advancedcustomfields.com/resources/taxonomy/

2/Cochez la case taxonomie en ajoutant simplement 'meta_box_cb' à 'false' lors de l'enregistrement de votre taxonomie personnalisée.

J'espère que cela t'aides..!!

0
dhirenpatel22