J'ai un type de message personnalisé avec sa propre taxonomie. Fondamentalement, "lieux de diffusion" est le type de message et les régions de lieu sont la taxonomie.
Voyant qu'un lieu ne peut exister dans plusieurs régions, j'ai supprimé la boîte par défaut de metta et ajouté la mienne sous forme de liste déroulante à l'aide de wp_dropdown_categories()
. Les éléments de taxonomie sont en sortie et apparaissent tels que je les souhaite, MAIS ils ne sont pas soumis et la liste déroulante ne contient pas la sélection après la soumission. J'ai essayé dans la mesure où je suis en mesure d'examiner les divers attributs du métabox d'origine et j'ai essayé de les appliquer à la liste déroulante, mais je n'ai pas encore eu la moindre joie.
J'ai regardé quelques-uns des divers messages sur WPSE et n'ai pas ai été capable de dire où je me trompe.
Quelqu'un peut-il préciser quelles seront les prochaines étapes/quelles sont les parties manquantes?
<?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
}
récupère l'identifiant du post
$post_id=get_the_ID();
obtenir la région sélectionnée
$terms = wp_get_post_terms( $post_id, $taxonomy );
$selected_id='';
if(isset($terms[0]->term_id)){
$selected_id=$terms[0]->term_id;
}
construire un menu déroulant hiérarchique
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
) );
En utilisant la fonction wp_dropdown_categories()
, vous pouvez utiliser un paramètre appelé selected
auquel vous attribueriez l'ID de la catégorie sélectionnée. Vous devez également normaliser le nom de votre sélection pour faciliter l’enregistrement:
$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
) );
Vous devez enregistrer le postmeta et le récupérer (via get_post_meta()
). Dans votre exemple, il semble que vous obteniez le premier terme, qui peut ne pas toujours être le terme sélectionné. Ensuite, vous affectez le $selected_id
à l'index selected
dans nos arguments.