web-dev-qa-db-fra.com

Liste déroulante d'un type d'article personnalisé

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?

2
Holden

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' ); ?>
6
chrisguitarguy

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);    
0
RafaSashi