J'ai un type de message personnalisé, Médecins, pour lequel je dois créer un menu déroulant. Je veux juste qu'il remplisse une liste de sélection avec toutes les publications de ce CPT et accède à cette publication lors de la sélection.
Je fais quelques autres menus déroulants avec wp_dropdown_categories, mais je suppose qu’il n’existe aucune fonction intégrée permettant d’inscrire un type de message?
Vous devrez utiliser get_posts
et dérouler votre propre liste déroulante.
Quelque chose comme ça (quelque part dans functions.php
):
<?php
function wpse34320_type_dropdown( $post_type )
{
$posts = get_posts(
array(
'post_type' => $post_type,
'numberposts' => -1
)
);
if( ! $posts ) return;
$out = '<select id="wpse34320_select"><option>Select a Doctor</option>';
foreach( $posts as $p )
{
$out .= '<option value="' . get_permalink( $p ) . '">' . esc_html( $p->post_title ) . '</option>';
}
$out .= '</select>';
return $out;
}
Puis dans votre modèle ...
<?php echo wpse34320_type_dropdown( 'doctors' ); ?>
Cette fonction se comporte plutôt comme wp_dropdown_categories
une fonction
public function wpse34320_get_dropdown_posts( $args = array( 'post_type' => 'post', 'show_option_none' => 'Select a post', 'name' => null, 'selected' => '', 'echo' => true ) ){
$posts = get_posts(
array(
'post_type' => $args['post_type'],
'numberposts' => -1
)
);
$dropdown = '';
if( $posts ){
if( !is_string($args['name']) ){
$args['name'] = $args['post_type'].'_select';
}
$dropdown .= '<select id="'.$args['name'].'" name="'.$args['name'].'">';
$dropdown .= '<option value="-1">'.$args['show_option_none'].'</option>';
$args['selected'] = intval($args['selected']);
foreach( $posts as $p ){
$selected = '';
if( $p->ID == $args['selected'] ){
$selected = ' selected';
}
$dropdown .= '<option value="' . $p->ID . '"'.$selected.'>' . esc_html( $p->post_title ) . '</option>';
}
$dropdown .= '</select>';
}
if($args['name'] === false){
return $dropdown;
}
else{
echo $dropdown;
}
}
utilisation
$args=array(
'show_option_none' => 'Select a custom post type',
'post_type' => $post_type,
'name' => $name,
'selected' => $selected_id,
'echo' => true
);
wpse34320_get_dropdown_posts($args);