8768 sujets

Développement web côté serveur, CMS

Bonjour à tous.

J'ai une petite question sur les permaliens. Je fais un filtre pour afficher des offres d'emploi par secteur. Comme j'ai plusieurs secteurs, j'utilise un if() pour chaque cas, histoire d'économiser le nombre de fichier. Actuellement j'utilise un stripos() pour vérifier le nom de la page dans l'URL et afficher le bon filtre.

Je me doute bien que cette méthode est limité, car si on rajoute un nouveau secteur, ce dernier ne marchera pas.

Y a-t-il une façon dynamique pour vérifier la page sur laquelle on est sur wordpress ?

Merci par avance pour vos réponses,
Voilà ce que j'ai actuellement :

if (stripos($urlrecup, 'mapagesecteur1') !== FALSE) {
$args = array(
'post_type' => 'offre-item',
'tax_query' => array(
array(
'taxonomy' => 'mataxocustom',
'field' => 'slug',
'terms' => 'secteur1'
)),
'posts_per_page' => 15,
'paged' => $paged
);
}elseif (stripos($urlrecup, 'mapagesecteur2') !== FALSE) {
$args = array(
'post_type' => 'offre-item',
'tax_query' => array(
array(
'taxonomy' => 'mataxocustom',
'field' => 'slug',
'terms' => 'secteur2'
)),
'posts_per_page' => 15,
'paged' => $paged
);
}

ça fonctionne, mais j'aimerais que ça soit maintenable. Si on rakjoute un secteur dans le BO, il ne s'affichera pas tant qu'on ne sera pas intervenu dans le code.
Salut,

Soit tu n'utilises en effet pas la bonne manière ou tu as une façon de faire très particulière.
A quoi ressemble actuellement tes urls ? Tes offres sont de quel type : page/article/custom_post ?

A première vue il faudrait créer un type de post custom (https://codex.wordpress.org/Post_Types) nommé par exemple "job_offer".
Puis créer une taxonomie custom (https://codex.wordpress.org/Function_Reference/register_taxonomy) nommée par exemple "secteur" liée à ton type "job_offer".
Tu auras donc la possibilité de requêter tes offres selon ce critère.

Tes urls de chaque offre d'emploi (single) sera /job_offer/titre_offre et la liste des offres dans un secteur d'activité sera à cette url /secteur/nom_du_secteur.

EDIT : Nos posts se sont croisés...
Modifié par MatthieuR (17 Jan 2017 - 21:40)
Oui, merci pour votre remarque.

C'est déjà le cas justement. En fait ce site a été initialement développé par quelqu'un d'autre. J'essai juste de garder sa logique à lui pour travailler.

voici ce que l'on m'a conseillé, mais ça ne marche pas :



 // On récupère la liste des secteurs de la page
                        // (dans ton cas, il n'y en aura qu'un seul mais bon
                        $secteurs = get_the_terms( get_the_ID(), 'sector-category' );

                        // On boucle sur ce(s) secteur(s) pour en récupérer les IDs
                        $secteurs_ids = array_map(function($secteur) {
                            return $secteur->term_id;
                        }, $secteurs);

                        // On inclue ça dans la WP_Query
                        $args = array(
                            'post_type' => 'offre-item',
                            'tax_query' => array(
                                array(
                                    'taxonomy' => 'sector-category',
                                    'field'    => 'term_id',
                                    'terms'    => $secteurs_ids,
                                    'operator' => 'IN',
                                )),
                            'posts_per_page' => 15,
                            'paged' => $paged
                        );



On me conseil de lier la taxonomy avec mon template de page, mais je peux pas le faire car c'est justement un template qui apparait dans la liste des templates dans l'interface "page" du BO. Je ne peux pas utiliser un fichier taxonomy-nondelataxo-nomduterm.php pour filtrer.
Ah bah le souci est en effet que tu as un template custom.
Mais pourquoi créer des pages pour ce genre d'affichage ?
Il faudrait en effet que tu puisses faire des templates de la forme dont tu parles (taxonomy-nondelataxo-nomduterm.php).

Le bout de code que tu as mis peut très bien fonctionner il faut juste que tu déclares ta taxonomie 'sector-category' pour tes 2 types de posts (offre-item ET page) de cette manière :

register_taxonomy(
        'sector-category',
        array('page', 'offre-item'),
        array(
            'label' => __( 'Secteur d\'activité' ),
            'hierarchical' => true,
        )
    );

Le 1er et 2e arguments de la fonction register_taxonomy() doivent être comme ça, le 3è tu fais comme tu veux selon tes besoins.
C'est ainsi que tu pourras lier ta page aux offres d'emploi via une requête dans ton template mais franchement c'est pas naturel.
Dans tous les cas, ne fais pas de parsing de ton URL avec WP (en avec la plupart des CMS et frameworks), si tu dois arriver à sa c'est qu'il y a une autre solution...