Créer un menu déroulant d’une liste de Custom Post Type

Pour un besoin client, j’ai du générer une liste déroulante qui va récupérer tous les custom post types se trouvant dans le post type de mon client afin de pouvoir accéder au post via la sélection du menu déroulant.

Voici comment fait en mettant ce code dans votre fichier functions.php  et en modifiant les variables en surbrillances par vos éléments :

				
					// ***** Afficher le menu déroulant de toutes les salles de sport ***** //

function afficher_liste_salle_de_sport() {
    // Obtenir tous les posts de type 'salle-de-sport'
    $args = array(
        'post_type' => 'salle-de-sport',
        'posts_per_page' => -1
    );
    $posts = get_posts($args);

    // Trier les posts par titre (ordre alphabétique)
    usort($posts, function($a, $b) {
        return strcmp(get_the_title($a->ID), get_the_title($b->ID));
    });
    
    // Commencer la construction du formulaire
    $output = '<form action="" method="get">';
    $output .= '<select name="post_id" onchange="if(this.value) window.location.href=this.value;">';
    $output .= '<option value="" disabled selected class="defaut-choix-salle">+ de 20 salles en France</option>';


    // Ajouter chaque post au menu déroulant
    foreach ($posts as $post) {
        $output .= '<option value="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</option>';
    }

    // Fermer le formulaire
    $output .= '</select>';
    $output .= '</form>';

    return $output;
}
add_shortcode('liste_salle_de_sport', 'afficher_liste_salle_de_sport');
				
			

Ligne 6 vous devez changer le post-type en fonction de votre post-type, ligne 19 le texte qui va s’afficher par défaut et ligne 33 le shortcode que vous voulez insérer dans votre page pour afficher le menu déroulant.

Ici avec mon code le shortcode à insérer est [liste_salle_de_sport]

Ci-dessous un petit code CSS custom pour avoir un beau rendu de notre dropdown, à adapter bien entendu en fonction de vos couleurs et images.

Dans notre cas, voici le rendu final :

				
					/******************************* Custom dropdown - Trouver une salle *******************************/
.custom-select {
  position: relative;
}
/* Désactive le dropdown de base pour pouvoir créer un custom dropdown */
.custom-select select {
  display: none;
}
/* Style du bouton dropdown */
.custom-select .select-selected {
    font-size: 25px;
    font-weight: 300;
    line-height: 32px;
    fill: var(--e-global-color-accent);
    color: var(--e-global-color-accent);
    padding: 12px 50px 12px 62px;
    border-radius: 10px;
	text-transform: uppercase;
    background: url(/wp-content/uploads/2024/01/icone-loupe-blanche.svg) 5% / 6% no-repeat #1C1C1C;
    border-bottom: 1px solid var(--e-global-color-primary);
	min-width: 355px;
	cursor: pointer;
}
/* Style du bouton dropdown actif */
.select-selected.select-arrow-active {
    border-radius: 10px 10px 0 0;
    border-bottom: 1px solid var(--e-global-color-secondary);
}
/* Style de la flèche à droite */
.custom-select .select-selected:after {
    position: absolute;
    content: "";
    top: 25px;
    right: 20px;
    width: 0;
    height: 0;
    border: 6px solid transparent;
    border-color: var(--e-global-color-secondary) transparent transparent transparent;
}
/* Style de la flèche "active" à droite */
.custom-select .select-selected.select-arrow-active:after {
    border-color: transparent transparent var(--e-global-color-secondary) transparent;
    top: 17px;
    right: 20px;
}
/* Contenu du dropdown */
.custom-select .select-items {
    position: absolute;
    background-color: var(--e-global-color-primary);
    top: 100%;
    left: 0;
    right: 0;
    z-index: 99;
    max-height: 237px;
    overflow-y: auto;
    border-radius: 0 0 10px 10px;
}
.custom-select .select-items div {
    color: #ffffff;
    padding: 3px 40px;
    border-bottom: 1px solid #ffffff57;
    cursor: pointer;
}
/* Contenu du dropdown au hover */
.custom-select .select-items div:hover, .custom-select .same-as-selected {
    background-color: var(--e-global-color-secondary);
}
/* Masque le contenu du dropdown si non actif */
.custom-select .select-hide {
  display: none;
}
/* Mobile */
@media (max-width:767px){
.custom-select .select-items {
    position: relative !important;
}
.custom-select .select-selected {
    font-size: 18px !important;
    padding: 12px 42px 12px 40px !important;
    background: url(/wp-content/uploads/2024/01/icone-loupe-blanche.svg) 6% / 8% no-repeat #1C1C1C !important;
	min-width: 255px;
}
}
				
			
Envie de laisser un commentaire ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Tu veux voir d'autres bouts de code ?

WooCommerce Product Buyers List

Ajoute un onglet dans WooCommerce pour afficher les acheteurs d'un produit spécifique avec filtre de date.

Emails additionnels par produits WooCommerce

Ajoute un onglet personnalisé dans les produits WooCommerce pour écrire un e-mail spécifique à chaque produit. Celui-ci sera envoyé dans un e-mail dédié.

Créer une galerie personnalisée avec Elementor

Avec ce code vous allez pouvoir créer une galerie personnalisée avec Elementor

Afficher le poids total des produits dans le panier et commande

Ce code va nous permettre d'afficher le poids total des produits dans la page panier et commande de WooCommerce

ID de CSS personnalisé pour Elementor nested tabs

Ce script nous permettra d'exécuter une URL directement vers un onglet Elementor

Statistiques des commandes WooCommerce par pays

Ce plugin vous permet d'afficher rapidement les volumes de vente en fonction des pays.
ON DISCUTE ?

Une question sur WordPress ?
Un projet web à faire sous traiter par un freelance ?
Je suis votre homme !